スキーマの管理
このトピックではMilvusにおけるスキーマについて紹介します。スキーマはコレクションとその中のフィールドのプロパティを定義するために使用されます。
フィールドスキーマ
フィールドスキーマはフィールドの論理的定義です。コレクションスキーマを定義し、コレクションを管理する前に最初に定義する必要があります。
Milvusはコレクション内の主キーフィールドを1つだけサポートしています。
フィールドスキーマプロパティ
プロパティ | 説明 | 備考 |
---|---|---|
name |
作成するコレクション内のフィールド名 | データ型: 必須 |
dtype |
フィールドのデータ型 | 必須 |
description |
フィールドの説明 | データ型: 任意 |
is_primary |
フィールドを主キーフィールドとして設定するかどうか。 | データ型:ブール値(true またはfalse )。主キーフィールドには必須。 |
auto_id (主キー・フィールドの場合は必須) |
ID(主キー)の自動割り当てを有効または無効にするスイッチ。 | True またはFalse |
max_length (VARCHARフィールドでは必須)。 |
挿入可能な文字列の最大バイト長。マルチバイト文字(Unicode文字など)はそれぞれ1バイト以上を占めることがあるので、挿入される文字列のバイト長が指定された上限を超えないようにしてください。 | [1, 65,535] |
dim |
ベクトルの次元 | データ型: 密なベクトル・フィールドでは必須。疎なベクトル場では省略。 |
is_partition_key |
このフィールドがパーティション・キー・フィールドであるかどうか。 | データ型:Boolean (true またはfalse )。 |
フィールド・スキーマの作成
データ挿入の複雑さを軽減するために、Milvusではフィールドスキーマ作成時に、プライマリキーフィールドを除く各スカラーフィールドのデフォルト値を指定することができます。これは、データ挿入時にフィールドを空のままにした場合、このフィールドに指定したデフォルト値が適用されることを示します。
通常のフィールド・スキーマを作成する:
from pymilvus import FieldSchema
id_field = FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, description="primary id")
age_field = FieldSchema(name="age", dtype=DataType.INT64, description="age")
embedding_field = FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=128, description="vector")
# The following creates a field and use it as the partition key
position_field = FieldSchema(name="position", dtype=DataType.VARCHAR, max_length=256, is_partition_key=True)
デフォルト・フィールド値を持つフィールド・スキーマを作成します:
from pymilvus import FieldSchema
fields = [
FieldSchema(name="id", dtype=DataType.INT64, is_primary=True),
# configure default value `25` for field `age`
FieldSchema(name="age", dtype=DataType.INT64, default_value=25, description="age"),
embedding_field = FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=128, description="vector")
]
サポートされるデータ型
DataType
は、フィールドに含まれるデータの種類を定義します。フィールドによってサポートするデータ型が異なります。
主キーフィールドは以下のデータ型をサポートします:
- INT64: numpy.int64
- varchar: varchar
スカラーフィールドがサポートします:
- BOOL: ブーリアン (
true
またはfalse
) - INT8: numpy.int8
- INT16: numpy.int16
- INT32: numpy.int32
- INT64: numpy.int64
- FLOAT: numpy.float32
- DOUBLE: numpy.double
- varchar: varchar
- JSON:JSON
- 配列:配列
複合データ型としてのJSONが利用できます。JSONフィールドはキーと値のペアで構成されます。各キーは文字列で、値は数値、文字列、ブーリアン値、配列、リストのいずれかです。詳細はJSON: a new data typeを参照。
- BOOL: ブーリアン (
ベクター・フィールドのサポート
- BINARY_VECTOR:バイナリ・データを0と1のシーケンスとして格納し、画像処理や情報検索でコンパクトな特徴表現に使用される。
- FLOAT_VECTOR:32ビット浮動小数点数を格納。科学計算や機械学習で実数を表現する際によく使用される。
- FLOAT16_VECTOR:16ビットの半精度浮動小数点数を格納し、ディープラーニングやGPU計算でメモリと帯域幅の効率化のために使用されます。
- BFLOAT16_VECTOR:精度を落とした16ビット浮動小数点数を格納しますが、指数範囲はFloat32と同じで、精度に大きな影響を与えることなくメモリと計算量を削減するためにディープラーニングでよく使用されます。
- SPARSE_FLOAT_VECTOR: スパース・ベクトルを表現するために使用される、非ゼロ要素とそれに対応するインデックスのリストを格納する。詳細はスパースベクタを参照してください。
Milvusはコレクション内の複数のベクトルフィールドをサポートしています。詳細はハイブリッド検索を参照。
コレクションスキーマ
コレクションスキーマはコレクションの論理的定義です。通常、コレクションスキーマを定義してコレクションを管理する前に、フィールドスキーマを定義する必要があります。
コレクションスキーマのプロパティ
プロパティ | 説明 | 注釈 |
---|---|---|
field |
作成するコレクション内のフィールド | 必須 |
description |
コレクションの説明 | データ型: オプション |
partition_key_field |
パーティション・キーとして機能するように設計されたフィールドの名前。 | データ型: オプション |
enable_dynamic_field |
ダイナミック・スキーマを有効にするかどうか。 | データ型:true false オプション、デフォルトは 。 ダイナミック・スキーマの詳細については、 False ダイナミック・スキーマおよびコレクションを管理するためのユーザー・ガイドを参照してください。 |
コレクションスキーマの作成
from pymilvus import FieldSchema, CollectionSchema
id_field = FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, description="primary id")
age_field = FieldSchema(name="age", dtype=DataType.INT64, description="age")
embedding_field = FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=128, description="vector")
# Enable partition key on a field if you need to implement multi-tenancy based on the partition-key field
position_field = FieldSchema(name="position", dtype=DataType.VARCHAR, max_length=256, is_partition_key=True)
# Set enable_dynamic_field to True if you need to use dynamic fields.
schema = CollectionSchema(fields=[id_field, age_field, embedding_field], auto_id=False, enable_dynamic_field=True, description="desc of a collection")
スキーマを指定してコレクションを作成します:
from pymilvus import Collection,connections
conn = connections.connect(host="127.0.0.1", port=19530)
collection_name1 = "tutorial_1"
collection1 = Collection(name=collection_name1, schema=schema, using='default', shards_num=2)
shards_num
でシャード番号を定義できます。using
でエイリアスを指定して、コレクションを作成するMilvusサーバーを定義できます。- パーティションキーベースのマルチテナンシーを実装する必要がある場合、
is_partition_key
をTrue
に設定することで、フィールドのパーティションキー機能を有効にできます。 - 動的フィールドを有効にする必要がある場合、コレクションスキーマで
enable_dynamic_field
をTrue
に設定することで、動的スキーマを有効にできます。
また、Collection.construct_from_dataframe
を使用してコレクションを作成することもできます。これは、DataFrameからコレクション・スキーマを自動的に生成し、コレクションを作成します。
import pandas as pd
df = pd.DataFrame({
"id": [i for i in range(nb)],
"age": [random.randint(20, 40) for i in range(nb)],
"embedding": [[random.random() for _ in range(dim)] for _ in range(nb)],
"position": "test_pos"
})
collection, ins_res = Collection.construct_from_dataframe(
'my_collection',
df,
primary_field='id',
auto_id=False
)
次のページ
- コレクションを管理する際にスキーマを準備する方法を学びます。
- 動的スキーマの詳細。
- マルチテナントにおけるパーティション・キーについて。