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 im dtype 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()