コレクションの説明
Milvusでは、データを管理するために複数のコレクションを作成し、データをエンティティとしてコレクションに挿入することができます。コレクションとエンティティはリレーショナルデータベースのテーブルとレコードに似ています。このページでは、コレクションと関連する概念について説明します。
コレクション
コレクションは、固定列と可変行を持つ2次元テーブルです。各列はフィールドを表し、各行はエンティティを表します。
次の図は、8 つの列と 6 つのエンティティを持つコレクションを示しています。
コレクションの説明
スキーマとフィールド
オブジェクトを説明するときは、通常、サイズ、重量、位置などの属性に言及します。これらの属性は、コレクションのフィールドとして使用できます。各フィールドには、データ型やベクトル・フィールドの次元数など、さまざまな制約プロパティがあります。フィールドを作成し、それらの順序を定義することで、コレクションスキーマを形成できます。適用可能なデータ型については、スキーマの説明を参照してください。
挿入するエンティティには、すべてのスキーマ定義フィールドを含める必要があります。一部のフィールドをオプションにするには、以下を検討します。
フィールドを NULL 可能にするか、デフォルト値を設定します。
フィールドを NULL 可能にする方法またはデフォルト値を設定する方法の詳細は、Nullable & Default を参照してください。
ダイナミック・フィールドの有効化
ダイナミック・フィールドを有効にして使用する方法の詳細については、ダイナミック・フィールドを参照してください。
主キーと AutoId
リレーショナルデータベースのプライマリフィールドと同様に、コレクションには、エンティティを他と区別するためのプライマリフィールドがあります。プライマリ・フィールドの各値は、グローバルに一意であり、1 つの特定のエンティティに対応します。
上の図に示すように、idというフィールドがプライマリ・フィールドとして機能し、最初の ID0は、「コロナウイルスの死亡率は重要ではありません」というタイトルのエンティティに対応します。プライマリ・フィールドが 0 のエンティティは他に存在しません。
プライマリ・フィールドは、整数または文字列のみを受け入れます。エンティティの挿入時には、プライマリ・フィールドの値をデフォルトで含める必要があります。しかし、コレクション作成時にAutoIdを有効にしている場合、Milvusはデータ挿入時にそれらの値を生成します。このような場合は、挿入するエンティティからプライマリフィールド値を除外します。
詳細については、プライマリフィールドとAutoIDを参照してください。
インデックス
特定のフィールドにインデックスを作成すると、検索効率が向上します。サービスが依存するすべてのフィールドにインデックスを作成することをお勧めします。中でもベクターフィールドのインデックスは必須です。
エンティティ
エンティティは、コレクション内の同じフィールドセットを共有するデータレコードです。同じ行のすべてのフィールドの値がエンティティを構成します。
エンティティは、コレクションに必要な数だけ挿入できます。ただし、エンティティの数が増えると、必要となるメモリ・サイズも増加し、検索パ フォーマンスに影響します。
詳細については、スキーマの説明を参照してください。
ロードとリリース
コレクションのロードは、コレクションで類似検索とクエリを実行するための前提条件です。コレクションをロードすると、Milvusはすべてのインデックスファイルと各フィールドの生データをメモリにロードし、検索やクエリに高速に対応できるようにします。
検索とクエリはメモリを大量に消費します。コストを節約するには、現在使用していないコレクションを解放することをお勧めします。
詳細については、ロードと解放を参照してください。
検索とクエリ
インデックスを作成し、コレクションをロードすると、1つまたは複数のクエリ・ベクタを投入して 類似性検索を開始できます。例えば、検索リクエストに含まれるクエリのベクトル表現を受信すると、Milvusは指定されたメトリックタイプを使用してクエリベクトルとターゲットコレクション内の類似性を測定し、クエリと意味的に類似したものを返します。
検索やクエリにメタデータフィルタリングを含めることで、結果の関連性を向上させることもできます。メタデータのフィルタリング条件は、クエリでは必須ですが、検索ではオプションです。
適用可能なメトリック・タイプの詳細については、メトリック・タイプを参照してください。
検索とクエリの詳細については、検索と再ランクの章の記事を参照してください。
さらに、Milvusは検索パフォーマンスと効率を向上させるための拡張機能も提供しています。これらはデフォルトでは無効になっており、お客様のサービス要件に応じて有効にしたり、使用したりすることができます。それらは以下の通りです。
パーティション
パーティションは、親コレクションと同じフィールド・セットを共有するコレクションのサブセットで、それぞれがエンティティのサブセットを含みます。
エンティティを異なるパーティションに割り当てることで、エンティティ・グループを作成できます。特定のパーティションで検索やクエリを行うことで、milvusが他のパーティションのエンティティを無視し、検索効率を向上させることができます。
詳細については、「パーティションの管理」を参照してください。
シャード
シャードはコレクションの水平方向のスライスです。各シャードはデータ入力チャンネルに対応する。デフォルトでは、すべてのコレクションにシャードがあります。予想されるスループットとコレクションに挿入するデータ量に基づいて、コ レクションを作成するときに適切なシャードの数を設定できます。
シャード数を設定する方法の詳細は、Create Collectionを参照してください。
エイリアス
コレクションにエイリアスを作成できます。コレクションは複数のエイリアスを持つことができますが、コレクションはエイリアスを共有できません。コレクションに対するリクエストを受け取ると、Milvusは指定された名前に基づいてコレクションを検索します。指定された名前のコレクションが存在しない場合、Milvusはエイリアスとして指定された名前を探し続けます。コレクションエイリアスを使用すると、コードをさまざまなシナリオに適応させることができます。
詳細については、エイリアスの管理を参照してください。
関数
Milvusがコレクション作成時にフィールドを導出するための関数を設定できます。たとえば、全文検索関数は、ユーザ定義関数を使用して、特定のvarcharフィールドからスパースベクトルフィールドを導出します。全文検索の詳細については、全文検索を参照してください。
一貫性レベル
分散データベースシステムでは通常、整合性レベルを使用してデータノードやレプリカ間のデータの同一性を定義します。コ レ ク シ ョ ン を作成す る 際や、 コ レ ク シ ョ ン内で類似性検索を実行す る 際に、 個別の一貫性レベルを設定で き ます。適用可能な一貫性レベルは、Strong、Bounded Staleness、Session、およびEventuallyです。
これらの一貫性レベルの詳細については、一貫性レベルを参照してください。
制限
コレクションの制限と制約については、Limits & Restrictionsを参照してください。