Milvus Python SDKとAPIの紹介
カバー画像
背景
以下の図は、gRPCを介したSDKとMilvusの相互作用を表しています。Milvusはブラックボックスであると想像してください。プロトコル・バッファーは、サーバーのインターフェースと、それらが伝送する情報の構造を定義するために使用されます。従って、ブラックボックスであるMilvusの全ての操作はプロトコルAPIによって定義されます。
インタラクション
MilvusプロトコルAPI
MilvusプロトコルAPIは、milvus.proto
、common.proto
、schema.proto
、.proto
で終わるプロトコルバッファファイルで構成されています。適切な動作を保証するために、SDKはこれらのProtocol Buffersファイルを用いてMilvusと対話する必要があります。
milvus.proto
milvus.proto
MilvusService
を定義しているため、Milvus プロトコル API の重要なコンポーネントです。
以下のコードサンプルはインターフェースCreatePartitionRequest
を示しています。これには2つの主要な文字列型パラメータcollection_name
とpartition_name
があり、これに基づいてパーティション作成リクエストを開始することができます。
CreatePartitionRequest
19行目のPyMilvus GitHub RepositoryのProtocolの例を確認してください。
例
CreatePartitionRequest
の定義はここにあります。
定義
Milvusの機能またはSDKを異なるプログラミング言語で開発したいコントリビューターは、MilvusがRPC経由で提供する全てのインターフェースを見つけることができます。
common.proto
common.proto
は、 や を含む、共通の情報タイプを定義します。ErrorCode
Status
common.proto
スキーマ.プロト
schema.proto
はパラメータにスキーマを定義します。以下のコード・サンプルは の例である。CollectionSchema
schema.proto
milvus.proto
、common.proto
、schema.proto
を合わせてmilvusのAPIを構成し、RPCで呼び出せる全ての操作を表しています。
ソース・コードを掘り下げて注意深く観察すると、create_index
のようなインタフェースが呼び出されるとき、実際にはdescribe_collection
やdescribe_index
のような複数の RPC インタフェースを呼び出していることがわかります。Milvusの外側のインターフェースの多くは、複数のRPCインターフェースの組み合わせです。
RPCの動作を理解した上で、Milvusの新機能を組み合わせて開発することができます。あなたの想像力と創造力でMilvusコミュニティに貢献してください。
PyMilvus 2.0
オブジェクトリレーショナルマッピング (ORM)
一言で言うと、オブジェクトリレーショナルマッピング(ORM)とは、ローカルのオブジェクトを操作したときに、その操作がサーバ上の対応するオブジェクトに影響を与えることを指します。PyMilvus の ORM スタイルの API には次のような特徴があります:
- オブジェクトを直接操作する。
- サービスロジックとデータアクセスの詳細を分離します。
- 実装の複雑さを隠すことができ、異なるMilvusインスタンス間で、配置のアプローチや実装に関係なく同じスクリプトを実行することができます。
ORMスタイルのAPI
ORMスタイルAPIの本質の一つは、Milvus接続の制御にあります。例えば、複数のMilvusサーバにエイリアスを指定し、そのエイリアスだけで接続したり切断したりすることができます。また、ローカルサーバのアドレスを削除することもでき、特定の接続を介して特定のオブジェクトを正確に制御することができます。
接続の制御
ORM型APIのもう一つの特徴は、抽象化した後、コレクション、パーティション、インデックスを含むすべての操作をオブジェクトに対して直接実行できることです。
コレクションオブジェクトを抽象化するには、既存のオブジェクトを取得するか、新しいオブジェクトを作成します。また、Milvusのコネクションをコネクションエイリアスを用いて特定のオブジェクトに割り当てることで、これらのオブジェクトをローカルに操作することができます。
パーティションオブジェクトを作成するには、親コレクションオブジェクトと一緒に作成するか、コレクションオブジェクトを作成するときと同じように作成します。これらの方法は、インデックス・オブジェクトにも適用できます。
これらのパーティション・オブジェクトやインデックス・オブジェクトが存在する場合、親コレクション・オブジェクトを通して取得することができます。
ディープ・ダイブ・シリーズについて
Milvus 2.0の一般提供の正式発表に伴い、Milvusのアーキテクチャとソースコードの詳細な解釈を提供するために、このMilvus Deep Diveブログシリーズを企画しました。このブログシリーズで扱うトピックは以下の通りです:
- 背景
- MilvusプロトコルAPI
- PyMilvus 2.0
- ディープ・ダイブ・シリーズについて
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word