メインコンテンツまでスキップ

コレクションの作成

スキーマ、インデックスパラメーター、メトリクスタイプ、作成時にロードするかどうかを定義してコレクションを作成できます。このページでは、コレクションをゼロから作成する方法を紹介します。

Notes

強力なデータ分離が必要で、少数のテナントのみを管理する場合は、テナントごとに個別のコレクションを作成できます。

ただし、作成できるコレクションの最大数は、プロジェクトプランとクラスターのデプロイオプション に応じて 16,384 です。そのため、大規模なマルチテナンシーでは、ユースケースに応じて、パーティションベースまたはパーティションキーベースのマルチテナンシーなど、代替戦略の使用を検討してください。詳細については、マルチテナンシーの実装 を参照してください。

概要​

コレクションは、固定された列と可変の行を持つ二次元テーブルです。各列はフィールドを表し、各行はエンティティを表します。このような構造化データ管理を実装するにはスキーマが必要です。挿入するすべてのエンティティは、スキーマで定義された制約を満たしている必要があります。

スキーマ、インデックスパラメーター、メトリクスタイプ、作成時にロードするかどうかなど、コレクションのあらゆる側面を決定して、コレクションが要件を完全に満たすようにできます。

コレクションを作成するには、以下が必要です。

スキーマの作成​

スキーマはコレクションのデータ構造を定義します。コレクションを作成する際は、要件に基づいてスキーマを設計する必要があります。詳細については、スキーマの解説 を参照してください。

以下のコードスニペットでは、動的フィールドを有効にし、my_id、my_vector、my_varchar という 3 つの必須フィールドを持つスキーマを作成します。

Notes

任意のスカラーフィールドにデフォルト値を設定し、Null 許容にすることができます。詳細については、Nullable フィールド を参照してください。

python
# 3. Create a collection in customized setup mode
from pymilvus import MilvusClient, DataType

client = MilvusClient(
uri="YOUR_CLUSTER_ENDPOINT",
token="YOUR_CLUSTER_TOKEN"
)

# 3.1. Create schema
schema = MilvusClient.create_schema(
auto_id=False,
enable_dynamic_field=True,
)

# 3.2. Add fields to schema
schema.add_field(field_name="my_id", datatype=DataType.INT64, is_primary=True)
schema.add_field(field_name="my_vector", datatype=DataType.FLOAT_VECTOR, dim=5)
schema.add_field(field_name="my_varchar", datatype=DataType.VARCHAR, max_length=512)
Notes

データプレーン RESTful API エンドポイントを呼び出す際の認証トークンには、対象クラスターのユーザー名とパスワードをコロンで区切ったもの(username:password など)を使用してください。

(オプション)インデックスパラメーターの設定​

特定のフィールドにインデックスを作成すると、そのフィールドに対する検索が高速化されます。インデックスは、コレクション内のエンティティの順序を記録します。以下のコードスニペットに示すように、metric_type と index_type を使用して、Zilliz Cloud がフィールドにインデックスを作成し、ベクトル埋め込み間の類似度を測定するための適切な方法を選択できます。

Zilliz Cloud では、すべてのベクトルフィールドのインデックスタイプとして AUTOINDEX を使用でき、ニーズに応じて COSINE、L2、IP のいずれかをメトリクスタイプとして使用できます。

上記のコードスニペットで示したように、ベクトルフィールドにはインデックスタイプとメトリクスタイプの両方を設定し、スカラーフィールドにはインデックスタイプのみを設定する必要があります。インデックスはベクトルフィールドには必須であり、フィルタリング条件で頻繁に使用されるスカラーフィールドにもインデックスを作成することをお勧めします。

詳細については、Indexes を参照してください。

python
# 3.3. Prepare index parameters
index_params = client.prepare_index_params()

# 3.4. Add indexes
index_params.add_index(
field_name="my_id",
index_type="AUTOINDEX"
)

index_params.add_index(
field_name="my_vector",
index_type="AUTOINDEX",
metric_type="COSINE"
)

コレクションの作成​

インデックスパラメーターを指定してコレクションを作成した場合、Zilliz Cloud はコレクションの作成時に自動的にロードします。この場合、インデックスパラメーターに記載されたすべてのフィールドにインデックスが作成されます。

以下のコードスニペットでは、インデックスパラメーターを指定してコレクションを作成し、そのロードステータスを確認する方法を示します。

python
# 3.5. Create a collection with the index loaded simultaneously
client.create_collection(
collection_name="customized_setup_1",
schema=schema,
index_params=index_params
)

res = client.get_load_state(
collection_name="customized_setup_1"
)

print(res)

# Output
#
# {
# "state": "<LoadState: Loaded>"
# }

インデックスパラメーターを指定せずにコレクションを作成し、後から追加することもできます。この場合、Zilliz Cloud はコレクションの作成時にそのコレクションをロードしません。既存のコレクションにインデックスを作成する方法の詳細については、AUTOINDEX の解説 を参照してください。

以下のコードスニペットでは、インデックスなしでコレクションを作成する方法を示します。作成時点でコレクションのロードステータスは未ロードのままです。

python
# 3.6. Create a collection and index it separately
client.create_collection(
collection_name="customized_setup_2",
schema=schema,
)

res = client.get_load_state(
collection_name="customized_setup_2"
)

print(res)

# Output
#
# {
# "state": "<LoadState: NotLoad>"
# }

コレクションのプロパティを設定する​

作成するコレクションにプロパティを設定して、サービスに適合させることができます。適用可能なプロパティは以下のとおりです。

シャード数の設定​

シャードはコレクションの水平方向のスライスであり、各シャードはデータ入力チャネルに対応します。デフォルトでは、すべてのコレクションに 1 つのシャードがあります。データ量とワークロードにより適切に対応するため、コレクション作成時にシャード数を指定できます。

一般的なガイドラインとして、シャード数を設定する際は次の点を考慮してください。

  • データサイズ: 一般的な方法は、2 億エンティティごとに 1 つのシャードを用意することです。総データサイズに基づいて見積もることもできます。たとえば、挿入予定のデータ 100 GB ごとに 1 つのシャードを追加します。

以下のコードスニペットでは、コレクション作成時にシャード数を設定する方法を示します。

python
# With shard number
client.create_collection(
collection_name="customized_setup_3",
schema=schema,
num_shards=1
)

mmap を有効にする​

Zilliz Cloud では、すべてのコレクションでデフォルトで mmap が有効になっているため、Zilliz Cloud はフィールドの生データを完全にロードする代わりにメモリにマッピングできます。これにより、メモリ使用量が削減され、コレクションの容量が増加します。mmap の詳細については、mmap を使用する を参照してください。

python
# With mmap
client.create_collection(
collection_name="customized_setup_4",
schema=schema,
enable_mmap=False
)

コレクションの TTL を設定する​

コレクション内のデータを特定期間後に削除する必要がある場合は、Time-To-Live(TTL)を秒単位で設定することを検討してください。TTL がタイムアウトすると、Zilliz Cloud はコレクション内のエンティティを削除します。削除は非同期で実行されるため、削除が完了する前でも検索やクエリを実行できます。

以下のコードスニペットでは、TTL を 1 日(86400 秒)に設定します。TTL は最低でも数日に設定することをお勧めします。

python
# With TTL
client.create_collection(
collection_name="customized_setup_5",
schema=schema,
properties={
"collection.ttl.seconds": 86400
}
)

整合性レベルの設定​

コレクションを作成する際に、そのコレクション内の検索とクエリの整合性レベルを設定できます。特定の検索またはクエリの実行中に、コレクションの整合性レベルを変更することもできます。

python
# With consistency level
client.create_collection(
collection_name="customized_setup_6",
schema=schema,
consistency_level="Bounded",
)

整合性レベルの詳細については、整合性レベル を参照してください。

Dynamic Field を有効にする​

コレクションの動的フィールドは、&#36;meta という名前の予約済み JavaScript Object Notation(JSON)フィールドです。このフィールドを有効にすると、Zilliz Cloud は各エンティティに含まれるスキーマで定義されていないすべてのフィールドとその値を、キーと値のペアとして予約済みフィールドに保存します。

動的フィールドの使用方法の詳細については、Dynamic Field を参照してください。