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

Collection の作成

schema、index パラメータ、metric type、作成時にロードするかどうかを定義して collection を作成できます。このページでは、collection をゼロから作成する方法を紹介します。

📘注意

強力なデータ分離が必要で、少数の tenant のみを管理する場合は、tenant ごとに個別の collection を作成できます。

ただし、作成できる collection の最大数は、project plan と cluster deployment option に応じて 16,384 です。したがって、大規模なマルチテナンシーでは、ユースケースに応じて、partition ベースまたは partition-key ベースのマルチテナンシーなど、別の戦略の使用を検討してください。詳細については、Implement Multi-tenancy を参照してください。

Overview

collection は、固定された列と可変の行を持つ二次元テーブルです。各列は field を表し、各行は entity を表します。このような構造化データ管理を実装するには schema が必要です。挿入するすべての entity は、schema で定義された制約を満たしている必要があります。

schema、index パラメータ、metric type、作成時にロードするかどうかなど、collection のあらゆる側面を決定して、collection が要件を完全に満たすようにできます。

collection を作成するには、以下が必要です。

schema の作成

schema は collection のデータ構造を定義します。collection を作成する際は、要件に基づいて schema を設計する必要があります。詳細については、Schema Explained を参照してください。

以下のコードスニペットでは、dynamic field を有効にし、my_idmy_vectormy_varchar という 3 つの必須 field を持つ schema を作成します。

📘注意

任意の scalar field にデフォルト値を設定し、nullable にすることができます。詳細については、Nullable & Default を参照してください。

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)
📘注意

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

(オプション)index パラメータの設定

特定の field に index を作成すると、その field に対する検索が高速化されます。index は collection 内の entity の順序を記録します。以下のコードスニペットに示すように、metric_typeindex_type を使用して、Zilliz Cloud が field に index を作成する適切な方法と、vector embedding 間の類似度を測定する方法を選択できます。

Zilliz Cloud では、すべての vector field に対して AUTOINDEX を index type として使用でき、ニーズに応じて COSINEL2IP のいずれかを metric type として使用できます。

上記のコードスニペットで示したように、vector field には index type と metric type の両方を設定し、scalar field には index type のみを設定する必要があります。vector field には index が必須であり、フィルタリング条件で頻繁に使用される scalar field にも index を作成することが推奨されます。

詳細については、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"
)

collection の作成

index パラメータ付きで collection を作成した場合、Zilliz Cloud は collection の作成時に自動的にその collection をロードします。この場合、index パラメータに記載されたすべての field が index 化されます。

以下のコードスニペットでは、index パラメータ付きで collection を作成し、そのロード状態を確認する方法を示します。

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>"
# }

index パラメータなしで collection を作成し、後から追加することもできます。この場合、Zilliz Cloud は collection の作成時にその collection をロードしません。既存の collection に対して index を作成する方法の詳細については、AUTOINDEX Explained を参照してください。

以下のコードスニペットでは、index なしで collection を作成する方法を示しており、collection のロード状態は作成時点で未ロードのままです。

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>"
# }

Collection プロパティの設定

作成する collection には、サービスに適合させるためのプロパティを設定できます。適用可能なプロパティは以下のとおりです。

シャード数の設定

シャードは collection を水平方向に分割したもので、各シャードはデータ入力チャネルに対応します。デフォルトでは、すべての collection には 1 つのシャードがあります。データ量やワークロードにより適した構成にするため、collection の作成時にシャード数を指定できます。

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

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

以下のコードスニペットは、collection の作成時にシャード数を設定する方法を示しています。

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

mmap の有効化

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

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

Collection TTL の設定

collection 内のデータを一定期間後に削除する必要がある場合は、秒単位で Time-To-Live (TTL) を設定することを検討してください。TTL が期限切れになると、Zilliz Cloud は collection 内の entity を削除します。削除は非同期で行われるため、削除が完了する前でも search や query は引き続き可能です。

以下のコードスニペットでは、TTL を 1 日(86400 秒)に設定しています。TTL は少なくとも数日に設定することを推奨します。

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

整合性レベルの設定

collection を作成する際に、その collection 内での search および query の整合性レベルを設定できます。特定の search または query の実行時に collection の整合性レベルを変更することもできます。

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

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

Dynamic Field の有効化

collection の dynamic field は、&#36;meta という名前の予約済み JavaScript Object Notation (JSON) フィールドです。このフィールドを有効にすると、Zilliz Cloud は各 entity に含まれる schema で定義されていないすべてのフィールドとその値を、予約済みフィールド内のキーと値のペアとして保存します。

dynamic field の使用方法の詳細については、Dynamic Field を参照してください。