Die Collection-Klasse in Milvus ist ähnlich wie eine Tabelle in MySQL und dient dazu, Daten zu organisieren. Eine Collection besteht aus einer oder mehreren Partitionen.
Erstellung einer Collection
Eine Collection besteht aus einer oder mehreren Partitionen. Beim Erstellen einer neuen Collection wird Milvus eine Standardpartition mit dem Namen _default
erstellen. Weitere Informationen finden Sie in der Begriffserklärung - im Zusammenhang mit Collections.
Das folgende Beispiel erstellt eine Collection mit dem Namen book
und zwei Partitionen, einschließlich eines Primärschlüsselfeldes mit dem Namen book_id
, eines skalaren Feldes word_count
vom Typ INT64
und eines zweidimensionalen Gleitkommavektorfeldes book_intro
. In tatsächlichen Anwendungen werden oft höherdimensionale Vektoren als im Beispiel verwendet.
Vorbereitungsmodus
Der Modus ähnelt der Definition der Struktur einer MYSQL-Tabelle.
Die zu erstellende Sammlung muss ein Primärschlüsselfeld und ein Vektorfeld enthalten. Das Primärschlüsselfeld unterstützt die Datentypen INT64 und VarChar.
Zuerst müssen die notwendigen Parameter vorbereitet werden, einschließlich des Feldschemas, des Sammlungsschemas und des Sammlungsnamens.
Bevor das Sammlungsschema definiert wird, erstellen Sie ein Schema für jedes Feld in der Sammlung. Um die Komplexität der Dateneinfügung zu reduzieren, ermöglicht es Milvus, für jedes skalare Feld (außer dem Primärschlüsselfeld) einen Standardwert anzugeben. Dies bedeutet, dass wenn Sie ein Feld leer lassen beim Einfügen von Daten, der während der Feldschemaschaffung konfigurierte Standardwert verwendet wird.
from pymilvus import CollectionSchema, FieldSchema, DataType
book_id = FieldSchema(
name="book_id",
dtype=DataType.INT64,
is_primary=True,
)
book_name = FieldSchema(
name="book_name",
dtype=DataType.VARCHAR,
max_length=200,
default_value="Unbekannt" # Standardwert ist "Unbekannt"
)
word_count = FieldSchema(
name="word_count",
dtype=DataType.INT64,
default_value=9999 # Standardwert ist 9999
)
book_intro = FieldSchema(
name="book_intro",
dtype=DataType.FLOAT_VECTOR,
dim=2
)
schema = CollectionSchema(
fields=[book_id, book_name, word_count, book_intro],
description="Test Buchsuche", # Beschreibung ist "Test Buchsuche"
enable_dynamic_field=True # Dynamisches Schema aktivieren
)
collection_name = "buch"
Schematyp | Parameter | Beschreibung | Optionen |
---|---|---|---|
FieldSchema |
name |
Der Name des zu erstellenden Feldes. | N/A |
dtype |
Der Datentyp des zu erstellenden Feldes. | Primärschlüsselfeld: - DataType.INT64 (numpy.int64) - DataType.VARCHAR (VARCHAR) Skalare Felder: - DataType.BOOL (Boolean) - DataType.INT8 (numpy.int8) - DataType.INT16 (numpy.int16) - DataType.INT32 (numpy.int32) - DataType.INT64 (numpy.int64) - DataType.FLOAT (numpy.float32) - DataType.DOUBLE (numpy.double) - DataType.VARCHAR (VARCHAR) - DataType.JSON (JSON) Vektorfelder: - BINARY_VECTOR (Binärvektor) - FLOAT_VECTOR (Floatvektor) |
|
is_primary |
Ein Schalter, der steuert, ob das Feld ein Primärschlüsselfeld ist. Dieser Parameter muss für Primärschlüsselfelder angegeben werden. | True oder False |
|
auto_id |
Ein Schalter zum Aktivieren oder Deaktivieren der automatischen ID (Primärschlüssel) Zuweisung. Dieser Parameter muss für Primärschlüsselfelder angegeben werden und ist standardmäßig False . |
True oder False |
|
max_length (Erforderlich für VARCHAR-Felder) |
Die maximale Länge des einzufügenden Strings. | [1, 65,535] | |
default_value |
Der Standardwert des Feldes. Dieser Parameter gilt nur für nicht-array- und nicht-JSON-skalare Felder. Es ist nicht möglich, einen Standardwert für das Primärschlüsselfeld anzugeben. Weitere Informationen finden Sie im default_value -Parameter. |
N/A | |
dim (Erforderlich für Vektorfelder) |
Die Dimension des Vektors. | [1, 32,768] | |
description (Optional) |
Beschreibung des Feldes. | N/A | |
CollectionSchema |
fields |
Die für die Sammlung zu erstellenden Felder. | N/A |
description (Optional) |
Beschreibung der zu erstellenden Sammlung. | N/A | |
enable_dynamic_field |
Ob das dynamische Schema aktiviert werden soll. Datentyp: Boolean (true oder false ). Optional, Standard ist False . Weitere Informationen zum dynamischen Schema finden Sie im Benutzerhandbuch für dynamisches Schema und Sammlungsverwaltung. |
||
collection_name |
Der Name der zu erstellenden Sammlung. | N/A |
Erstellen einer Sammlung mit Schema
Erstellen Sie als Nächstes eine Sammlung mit dem angegebenen Schema.
from pymilvus import Collection
collection = Collection(
name=sammlungs_name,
schema=schema,
using='default',
shards_num=2
)
Parameter | Beschreibung | Optionen |
---|---|---|
using (optional) |
Geben Sie hier den Alias des Servers an und wählen Sie, wo die Sammlung im Milvus-Server erstellt werden soll. | N/A |
shards_num (optional) |
Die Anzahl der Shards für die zu erstellende Sammlung. | [1,16] |
num_partitions (optional) |
Die logische Anzahl der Partitionen für die zu erstellende Sammlung. | [1,4096] |
*kwargs: collection.ttl.seconds (optional) |
Die TTL der Sammlung ist die Ablaufzeit der Sammlung. Daten in der abgelaufenen Sammlung werden gelöscht und nehmen nicht an Suchen oder Abfragen teil. Geben Sie die TTL in Sekunden an. | Der Wert sollte 0 oder größer sein. 0 bedeutet die Deaktivierung der TTL. |
Beschränkungen
Ressourcenkonfiguration
Feature | Maximales Limit |
---|---|
Sammlungsname Länge | 255 Zeichen |
Anzahl der Partitionen in der Sammlung | 4.096 |
Anzahl der Felder in der Sammlung | 64 |
Anzahl der Shards in der Sammlung | 16 |
Parameter default_value
-
default_value
gilt nur für nicht-Array und nicht-JSON skalare Felder. -
default_value
gilt nicht für den Primärschlüssel. - Der Datentyp von
default_value
muss mit dem imdtype
angegebenen Datentyp übereinstimmen. Andernfalls können Fehler auftreten. - Im Fall von
auto_id
ist es nicht gestattet, alle verbleibenden Felder auf den Standardwert zu setzen. Mit anderen Worten, bei Durchführung von Einfüge- oder Aktualisierungsvorgängen müssen Sie den Wert mindestens eines Feldes angeben. Andernfalls können Fehler auftreten.
Umbenennen einer Sammlung
Wenn Sie eine Sammlung umbenennen möchten, können Sie mit Milvus über die API zur Umbenennung der Sammlung interagieren. Diese Anleitung hilft Ihnen dabei, zu verstehen, wie Sie Ihr gewähltes SDK verwenden, um eine vorhandene Sammlung umzubenennen.
Im folgenden Code-Schnipsel erstellen wir eine Sammlung und benennen sie in alte_sammlung
um, und benennen sie dann in neue_sammlung
um.
from pymilvus import Collection, FieldSchema, CollectionSchema, DataType, connections, utility
connections.connect(alias="default")
schema = CollectionSchema(fields=[
... FieldSchema("int64", DataType.INT64, description="int64", is_primary=True),
... FieldSchema("float_vector", DataType.FLOAT_VECTOR, is_primary=False, dim=128),
... ])
collection = Collection(name="alte_sammlung", schema=schema)
utility.rename_collection("alte_sammlung", "neue_sammlung") # Ausgabe: True
utility.has_collection("neue_sammlung") # Ausgabe: False
Ändern einer Sammlung
Zurzeit ist die TTL-Funktion nur in Python verfügbar.
collection.set_properties(properties={"collection.ttl.seconds": 1800})
Das obige Beispiel ändert die TTL der Sammlung auf 1800 Sekunden.
Überprüfen, ob eine Sammlung existiert
Überprüfen Sie, ob die Sammlung in Milvus existiert.
from pymilvus import utility
utility.has_collection("buch")
Überprüfen von Sammlungsdetails
from pymilvus import Collection
collection = Collection("buch") # Erhalten Sie eine vorhandene Sammlung.
collection.schema # Gibt das CollectionSchema der Sammlung zurück.
collection.description # Gibt die Beschreibung der Sammlung zurück.
collection.name # Gibt den Namen der Sammlung zurück.
collection.is_empty # Gibt einen booleschen Wert zurück, der angibt, ob die Sammlung leer ist.
collection.num_entities # Gibt die Anzahl der Entitäten in der Sammlung zurück.
collection.primary_field # Gibt das schema.FieldSchema des Primärschlüsselfeldes zurück.
collection.partitions # Gibt eine Liste von [Partition]-Objekten zurück.
collection.indexes # Gibt eine Liste von [Index]-Objekten zurück.
collection.properties # Gibt die Ablaufzeit der Daten in der Sammlung zurück.
Alle Sammlungen auflisten
from pymilvus import utility
utility.list_collections()
Löschen einer Sammlung
from pymilvus import utility
utility.drop_collection("buch")
Erstellen eines Sammlungs-Alias
from pymilvus import utility
utility.create_alias(
collection_name = "buch",
alias = "veröffentlichung"
)
Löschen eines Sammlungs-Alias
from pymilvus import utility
utility.drop_alias(alias = "veröffentlichung")
Ändern eines Sammlungsnamens
Ändern Sie ein vorhandenes Alias so, dass es auf eine andere Sammlung verweist. Das folgende Beispiel basiert auf dem Szenario, in dem das Alias "publication" ursprünglich für eine andere Sammlung erstellt wurde.
from pymilvus import utility
utility.alter_alias(
collection_name = "book",
alias = "publication"
)
Laden einer Sammlung
So laden Sie eine Sammlung in den Speicher, bevor Such- oder Abfrageoperationen durchgeführt werden. In Milvus werden alle Such- und Abfrageoperationen im Speicher ausgeführt.
Milvus ermöglicht es Benutzern, Sammlungen als mehrere Replikate zu laden, um zusätzliche CPU- und Speicherressourcen der Abfragenodes zu nutzen. Diese Funktion verbessert die Gesamt-QPS und Durchsatz ohne zusätzliche Hardware. Stellen Sie vor dem Laden einer Sammlung sicher, dass Sie für diese einen Index erstellt haben.
from pymilvus import Collection, utility
collection = Collection("book")
collection.load(replica_number=2)
utility.load_state("book")
utility.loading_progress("book")
Freigeben einer Sammlung
So lassen Sie eine Sammlung nach Such- oder Abfrageoperationen frei, um den Speicherverbrauch zu reduzieren.
from pymilvus import Collection
collection = Collection("book")
collection.release()