Mengelola Skema
Topik ini memperkenalkan skema di Milvus. Skema digunakan untuk mendefinisikan properti koleksi dan field-field di dalamnya.
Skema bidang
Skema field adalah definisi logis dari sebuah field. Ini adalah hal pertama yang perlu Anda definisikan sebelum mendefinisikan skema koleksi dan mengelola koleksi.
Milvus hanya mendukung satu field kunci utama dalam sebuah koleksi.
Properti skema field
Properti | Deskripsi | Catatan |
---|---|---|
name |
Nama bidang dalam koleksi yang akan dibuat | Tipe data: String. Wajib |
dtype |
Tipe data dari field tersebut | Wajib |
description |
Deskripsi bidang | Tipe data: String. Opsional |
is_primary |
Apakah akan menetapkan bidang sebagai bidang kunci utama atau tidak | Tipe data: Boolean (true atau false ).Wajib untuk bidang kunci utama |
auto_id (Wajib untuk bidang kunci utama) |
Beralih untuk mengaktifkan atau menonaktifkan alokasi ID (kunci utama) otomatis. | True atau False |
max_length (Wajib untuk bidang VARCHAR) |
Panjang byte maksimum untuk string yang diizinkan untuk disisipkan. Perhatikan bahwa karakter multibyte (misalnya, karakter Unicode) dapat menempati lebih dari satu byte, jadi pastikan panjang byte string yang disisipkan tidak melebihi batas yang ditentukan. | [1, 65,535] |
dim |
Dimensi vektor | Tipe data: Bilangan bulat ∈[1, 32768]. Wajib untuk bidang vektor yang padat. Hilangkan untuk bidang vektor yang jarang. |
is_partition_key |
Apakah bidang ini merupakan bidang kunci-partisi. | Tipe data: Boolean (true atau false ). |
Membuat skema bidang
Untuk mengurangi kerumitan dalam penyisipan data, Milvus mengizinkan Anda untuk menentukan nilai default untuk setiap field skalar selama pembuatan skema field, tidak termasuk field kunci utama. Hal ini mengindikasikan bahwa jika Anda mengosongkan sebuah field ketika memasukkan data, nilai default yang Anda tentukan untuk field tersebut akan berlaku.
Membuat skema bidang biasa:
from pymilvus import DataType, 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)
Membuat skema bidang dengan nilai bidang default:
from pymilvus import DataType, 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")
]
Tipe data yang didukung
DataType
menentukan jenis data yang berisi bidang. Bidang yang berbeda mendukung tipe data yang berbeda.
Mendukung bidang kunci utama:
- INT64: numpy.int64
- VARCHAR: VARCHAR
Mendukung bidang skalar:
- BOOL: Boolean (
true
ataufalse
) - INT8: numpy.int8
- INT16: numpy.int16
- INT32: numpy.int32
- INT64: numpy.int64
- FLOAT: numpy.float32
- DOUBLE: numpy.double
- VARCHAR: VARCHAR
- JSON: JSON
- Larik Larik
JSON sebagai tipe data gabungan tersedia. Bidang JSON terdiri dari pasangan kunci-nilai. Setiap kunci adalah string, dan nilai dapat berupa angka, string, nilai boolean, larik, atau daftar. Untuk detailnya, lihat JSON: tipe data baru.
- BOOL: Boolean (
Mendukung bidang vektor:
- BINARY_VECTOR: Menyimpan data biner sebagai urutan 0 dan 1, yang digunakan untuk representasi fitur yang ringkas dalam pemrosesan gambar dan pengambilan informasi.
- FLOAT_VECTOR: Menyimpan angka floating-point 32-bit, yang biasa digunakan dalam komputasi ilmiah dan pembelajaran mesin untuk merepresentasikan bilangan real.
- FLOAT16_VECTOR: Menyimpan angka floating-point setengah presisi 16-bit, digunakan dalam pembelajaran mendalam dan komputasi GPU untuk efisiensi memori dan bandwidth.
- BFLOAT16_VECTOR: Menyimpan angka floating-point 16-bit dengan presisi yang berkurang tetapi rentang eksponen yang sama dengan Float32, populer dalam deep learning untuk mengurangi kebutuhan memori dan komputasi tanpa memengaruhi akurasi secara signifikan.
- SPARSE_FLOAT_VECTOR: Menyimpan daftar elemen bukan nol dan indeks yang sesuai, yang digunakan untuk merepresentasikan vektor jarang. Untuk informasi lebih lanjut, lihat Vektor Jarang.
Milvus mendukung beberapa bidang vektor dalam sebuah koleksi. Untuk informasi lebih lanjut, lihat Pencarian Hibrid.
Skema koleksi
Skema koleksi adalah definisi logis dari sebuah koleksi. Biasanya Anda perlu mendefinisikan skema bidang sebelum mendefinisikan skema koleksi dan mengelola koleksi.
Properti skema koleksi
Properti | Deskripsi | Catatan |
---|---|---|
field |
Bidang dalam koleksi yang akan dibuat | Wajib |
description |
Deskripsi koleksi | Tipe data: String. Opsional |
partition_key_field |
Nama bidang yang dirancang untuk bertindak sebagai kunci partisi. | Tipe data: String. Opsional |
enable_dynamic_field |
Apakah akan mengaktifkan skema dinamis atau tidak | Tipe data: Boolean (true atau false ).Opsional, nilai defaultnya adalah False .Untuk detail mengenai skema dinamis, lihat Skema Dinam is dan panduan pengguna untuk mengelola koleksi. |
Membuat skema koleksi
from pymilvus import DataType, 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")
Buat koleksi dengan skema yang ditentukan:
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)
- Anda dapat menentukan nomor pecahan dengan
shards_num
. - Anda dapat menentukan server Milvus tempat Anda ingin membuat koleksi dengan menentukan alias di
using
. - Anda dapat mengaktifkan fitur kunci partisi pada bidang dengan mengatur
is_partition_key
keTrue
pada bidang jika Anda perlu mengimplementasikan multi-tenancy berbasis kunci partisi. - Anda dapat mengaktifkan skema dinamis dengan mengatur
enable_dynamic_field
keTrue
pada skema koleksi jika Anda perlu mengaktifkan field dinamis.
Anda juga dapat membuat koleksi dengan Collection.construct_from_dataframe
, yang secara otomatis membuat skema koleksi dari DataFrame dan membuat koleksi.
from pymilvus import Collection
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
)
Selanjutnya
- Pelajari cara menyiapkan skema saat mengelola koleksi.
- Baca lebih lanjut tentang skema dinamis.
- Baca lebih lanjut tentang kunci-partisi di Multi-penyewaan.