メインコンテンツまでスキップ
バージョン: User Guides (BYOC)

コレクションの作成

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

📘Notes

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

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

概要

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

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

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

スキーマの作成

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

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

📘Notes

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

# 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)を認証トークンとして使用します。

(Optional) Set Index Parameters

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

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

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

詳細については、インデックスの管理 を参照してください。

# 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 はそのコレクションを自動的にロードします。この場合、インデックスパラメータで指定されたすべてのフィールドがインデックスされます。

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

# 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 の解説 を参照してください。

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

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

Set Collection Properties

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

Set Shard Number

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

シャード数を設定する際の一般的なガイドラインは次のとおりです。

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

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

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

Enable mmap

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

# With mmap
client.create_collection(
collection_name="customized_setup_4",
schema=schema,
enable_mmap=False
)
export params='{
"mmap.enabled": True
}'

export CLUSTER_ENDPOINT="YOUR_CLUSTER_ENDPOINT"
export TOKEN="YOUR_CLUSTER_TOKEN"

curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/collections/create" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d "{
\"collectionName\": \"customized_setup_5\",
\"schema\": $schema,
\"params\": $params
}"

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

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

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

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

一貫性レベルの設定

コレクションを作成する際に、そのコレクション内の検索およびクエリに対して一貫性レベルを設定できます。また、特定の検索またはクエリ実行時に、コレクションの一貫性レベルを変更することも可能です。

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

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

Enable Dynamic Field

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

ダイナミックフィールドの使用方法の詳細については、ダイナミックフィールド を参照してください。