Schema verwalten
In diesem Thema wird das Schema in Milvus vorgestellt. Ein Schema wird verwendet, um die Eigenschaften einer Sammlung und die darin enthaltenen Felder zu definieren.
Feldschema
Ein Feldschema ist die logische Definition eines Feldes. Es ist das erste, was Sie definieren müssen, bevor Sie ein Sammlungsschema definieren und Sammlungen verwalten können.
Milvus unterstützt nur ein Primärschlüsselfeld in einer Sammlung.
Eigenschaften des Feldschemas
Eigenschaften | Beschreibung | Hinweis |
---|---|---|
name |
Name des Feldes in der zu erstellenden Sammlung | Datentyp: String. Obligatorisch |
dtype |
Datentyp des Feldes | Obligatorisch |
description |
Beschreibung des Feldes | Datentyp: Zeichenfolge. Optional |
is_primary |
Angabe, ob das Feld als Primärschlüsselfeld festgelegt werden soll oder nicht | Datentyp: Boolescher Wert (true oder false ).Obligatorisch für das Primärschlüsselfeld |
auto_id (Obligatorisch für das Primärschlüsselfeld) |
Schalter zum Aktivieren oder Deaktivieren der automatischen ID-Zuweisung (Primärschlüssel). | True oder False |
max_length (Obligatorisch für das VARCHAR-Feld) |
Maximale Bytelänge für Zeichenketten, die eingefügt werden können. Beachten Sie, dass Multibyte-Zeichen (z. B. Unicode-Zeichen) jeweils mehr als ein Byte belegen können. Stellen Sie daher sicher, dass die Bytelänge der eingefügten Zeichenketten den angegebenen Grenzwert nicht überschreitet. | [1, 65,535] |
dim |
Dimension des Vektors | Datentyp: Integer ∈[1, 32768]. Obligatorisch für ein dichtes Vektorfeld. Bei einem spärlichen V ektorfeld weglassen. |
is_partition_key |
Angabe, ob dieses Feld ein Partitionsschlüsselfeld ist. | Datentyp: Boolescher Wert (true oder false ). |
Ein Feldschema erstellen
Um die Komplexität beim Einfügen von Daten zu verringern, ermöglicht Milvus die Angabe eines Standardwerts für jedes Skalarfeld während der Erstellung des Feldschemas, außer für das Primärschlüsselfeld. Dies bedeutet, dass, wenn Sie ein Feld beim Einfügen von Daten leer lassen, der von Ihnen für dieses Feld angegebene Standardwert gilt.
Erstellen Sie ein reguläres Feldschema:
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)
Erstellen Sie ein Feldschema mit Standardfeldwerten:
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")
]
Unterstützte Datentypen
DataType
definiert die Art der Daten, die ein Feld enthält. Verschiedene Felder unterstützen unterschiedliche Datentypen.
Primärschlüsselfeld unterstützt:
- INT64: numpy.int64
- VARCHAR: VARCHAR
Skalar-Feld unterstützt:
- BOOL: Boolean (
true
oderfalse
) - INT8: numpy.int8
- INT16: numpy.int16
- INT32: numpy.int32
- INT64: numpy.int64
- FLOAT: numpy.float32
- DOUBLE: numpy.double
- VARCHAR: VARCHAR
- JSON: JSON
- Array: Array
JSON ist als zusammengesetzter Datentyp verfügbar. Ein JSON-Feld besteht aus Schlüssel-Werte-Paaren. Jeder Schlüssel ist eine Zeichenfolge, und ein Wert kann eine Zahl, eine Zeichenfolge, ein boolescher Wert, ein Array oder eine Liste sein. Einzelheiten finden Sie unter JSON: ein neuer Datentyp.
- BOOL: Boolean (
Vektorfeld unterstützt:
- BINARY_VECTOR: Speichert binäre Daten als eine Folge von 0en und 1en, die für eine kompakte Merkmalsdarstellung in der Bildverarbeitung und beim Informationsabruf verwendet werden.
- FLOAT_VECTOR: Speichert 32-Bit-Gleitkommazahlen, die häufig in der wissenschaftlichen Datenverarbeitung und beim maschinellen Lernen zur Darstellung reeller Zahlen verwendet werden.
- FLOAT16_VECTOR: Speichert 16-Bit-Gleitkommazahlen mit halber Genauigkeit, die bei Deep Learning und GPU-Berechnungen für Speicher- und Bandbreiteneffizienz verwendet werden.
- BFLOAT16_VECTOR: Speichert 16-Bit-Gleitkommazahlen mit verringerter Genauigkeit, aber demselben Exponentenbereich wie Float32, die beim Deep Learning zur Verringerung der Speicher- und Berechnungsanforderungen verwendet werden, ohne die Genauigkeit wesentlich zu beeinträchtigen.
- SPARSE_FLOAT_VECTOR: Speichert eine Liste von Nicht-Null-Elementen und ihren entsprechenden Indizes, die zur Darstellung von Sparse-Vektoren verwendet werden. Weitere Informationen finden Sie unter Sparse Vectors.
Milvus unterstützt mehrere Vektorfelder in einer Sammlung. Weitere Informationen finden Sie unter Hybride Suche.
Sammlungsschema
Ein Sammlungsschema ist die logische Definition einer Sammlung. Normalerweise müssen Sie das Feldschema definieren, bevor Sie ein Sammlungsschema definieren und Sammlungen verwalten können.
Eigenschaften des Sammlungsschemas
Eigenschaften | Beschreibung | Hinweis |
---|---|---|
field |
Felder in der zu erstellenden Sammlung | Obligatorisch |
description |
Beschreibung der Sammlung | Datentyp: String. Optional |
partition_key_field |
Name eines Feldes, das als Partitionsschlüssel fungieren soll. | Datentyp: String. Optional |
enable_dynamic_field |
Angabe, ob das dynamische Schema aktiviert werden soll oder nicht | Datentyp: Boolescher Wert (true oder false ).Optional, Standardwert ist False .Einzelheiten zum dynamischen Schema finden Sie unter Dynamisches Schema und in den Benutzerhandbüchern für die Verwaltung von Sammlungen. |
Erstellen eines Sammlungsschemas
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")
Erstellen Sie eine Sammlung mit dem angegebenen Schema:
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)
- Sie können die Shard-Nummer mit
shards_num
definieren. - Sie können den Milvus-Server definieren, auf dem Sie eine Sammlung erstellen möchten, indem Sie den Alias in
using
angeben. - Sie können die Partitionsschlüssel-Funktion für ein Feld aktivieren, indem Sie
is_partition_key
aufTrue
für das Feld setzen, wenn Sie eine auf Partitionsschlüsseln basierende Mandantenfähigkeit implementieren möchten. - Sie können das dynamische Schema aktivieren, indem Sie
enable_dynamic_field
aufTrue
im Sammlungsschema setzen, wenn Sie ein dynamisches Feld aktivieren müssen.
Sie können auch eine Sammlung mit Collection.construct_from_dataframe
erstellen, die automatisch ein Sammelschema aus DataFrame generiert und eine Sammlung erstellt.
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
)
Was kommt als Nächstes?
- Erfahren Sie, wie Sie bei der Verwaltung von Sammlungen ein Schema vorbereiten.
- Lesen Sie mehr über dynamische Schemata.
- Lesen Sie mehr über Partitionsschlüssel in Multi-Tenancy.