Einfügen von Entitäten
In diesem Abschnitt wird beschrieben, wie Daten über die Client-Seite in Milvus eingefügt werden.
Du kannst auch MilvusDM verwenden, um Daten in Milvus zu migrieren. MilvusDM ist ein Open-Source-Tool, das speziell für den Import und Export von Milvus-Daten entwickelt wurde.
Milvus 2.1 unterstützt den Datentyp VARCHAR
für skalare Felder. Beim Erstellen eines Index für ein skalares Feld vom Typ VARCHAR ist der standardmäßige Indextyp ein Trie.
Im folgenden Beispiel werden 2.000 Zeilen zufällig generierter Daten als Beispieldaten eingefügt (das Milvus CLI-Beispiel verwendet eine vorab erstellte entfernte CSV-Datei mit ähnlichen Daten). In realen Anwendungen werden oft höherdimensionale Vektoren als im Beispiel verwendet. Du kannst deine eigenen Daten vorbereiten, um die Beispieldaten zu ersetzen.
Datenvorbereitung
Zuerst bereite die einzufügenden Daten vor. Der einzufügende Datentyp muss dem Schema der Sammlung entsprechen, sonst wird Milvus eine Ausnahme auslösen.
Milvus unterstützt Standardwerte für skalare Felder, mit Ausnahme von Primärschlüsselfeldern. Das bedeutet, dass während der Dateneinfügung oder -aktualisierung einige Felder leer gelassen werden können. Weitere Informationen findest du unter Erstellen einer Sammlung.
Nachdem das dynamische Schema aktiviert wurde, können dynamische Felder an die Daten angehängt werden. Für ausführliche Informationen siehe Dynamisches Schema.
import random
data = [
[i for i in range(2000)],
[str(i) for i in range(2000)],
[i for i in range(10000, 12000)],
[[random.random() for _ in range(2)] for _ in range(2000)],
[],
None,
]
data.append([str("dy"*i) for i in range(2000)])
Einfügen von Daten in Milvus
Füge die Daten in die Sammlung ein.
Indem du partition_name
angibst, kannst du auswählen, in welche Partition die Daten eingefügt werden sollen.
from pymilvus import Collection
collection = Collection("book") # Eine bestehende Sammlung abrufen.
mr = collection.insert(data)
Parameter | Beschreibung |
---|---|
data |
Die in Milvus einzufügenden Daten. |
partition_name (optional) |
Der Name der Partition, in die die Daten eingefügt werden. |
Nach dem Einfügen von Entitäten in eine zuvor indizierte Sammlung ist kein erneutes Indizieren der Sammlung erforderlich, da Milvus automatisch Indizes für die neu eingefügten Daten erstellt. Weitere Informationen findest du unter Können Indizes nach dem Einfügen von Vektoren erstellt werden?
Aktualisieren von Daten in Milvus
Wenn Daten in Milvus eingefügt werden, werden sie in Segmente eingefügt. Segmente müssen eine bestimmte Größe erreichen, um versiegelt und indiziert zu werden. Ungesiegelte Segmente verwenden eine Bruteforce-Suche. Um diese Situation zu vermeiden, ist es am besten, flush()
für verbleibende Daten aufzurufen. Der Aufruf von flush()
wird alle verbleibenden Segmente versiegeln und an den Index senden. Es ist wichtig, diese Methode nur am Ende einer Einfügesitzung aufzurufen. Ein zu häufiger Aufruf kann zu fragmentierten Daten führen, die später bereinigt werden müssen.
Einschränkungen
Funktion | Maximale Begrenzung |
---|---|
Vektordimension | 32.768 |
Entität aktualisieren
Das Aktualisieren durch Upsert ist eine Kombination aus Einfüge- und Löschvorgängen. Im Kontext der Milvus-Vektordatenbank ist die Aktualisierung ein datenbasierter Vorgang. Dabei wird die vorhandene Entität überschrieben, wenn das angegebene Feld in der Sammlung existiert, und eine neue Entität eingefügt, wenn der angegebene Wert nicht existiert.
Im folgenden Beispiel werden 3.000 Zeilen zufällig generierter Daten als Beispieldaten aktualisiert. Beim Durchführen des Aktualisierungsvorgangs ist es wichtig zu beachten, dass dieser Vorgang die Leistung beeinträchtigen kann, da er das Löschen von Daten beinhaltet.
Daten vorbereiten
Bereite zuerst die zu aktualisierenden Daten vor. Der zu aktualisierende Datentyp muss dem Schema der Sammlung entsprechen, sonst wird Milvus eine Ausnahme auslösen.
Milvus unterstützt Standardwerte für skalare Felder, mit Ausnahme von Primärschlüsselfeldern. Das bedeutet, dass während der Dateneinfügung oder -aktualisierung einige Felder leer gelassen werden können. Weitere Informationen findest du unter Erstellen von Sammlungen.
import random
nb = 3000
dim = 8
vectors = [[random.random() for _ in range(dim)] for _ in range(nb)]
data = [
[i for i in range(nb)],
[str(i) for i in range(nb)],
[i for i in range(10000, 10000+nb)],
vectors,
[str("dy"*i) for i in range(nb)]
]
Daten aktualisieren
Aktualisiere die Daten in der Sammlung.
from pymilvus import Collection
collection = Collection("book") # Die bestehende Sammlung abrufen.
mr = collection.upsert(data)
Entität löschen
Milvus unterstützt die Löschung von Entitäten unter Verwendung von booleschen Ausdrücken über Primärschlüssel.
Vorbereiten des booleschen Ausdrucks
Vorbereiten Sie einen booleschen Ausdruck, um die zu löschenden Entitäten zu filtern.
Milvus unterstützt nur das Löschen von Entitäten mit explizit angegebenen Primärschlüsseln, was mit dem "in"-Operator erreicht werden kann. Andere Operatoren können nur bei der skalaren Filterung für Abfragen oder Vektorsuche verwendet werden.
Im folgenden Beispiel werden Daten mithilfe der Primärschlüsselwerte 0 und 1 gefiltert.
expr = "book_id in [0,1]"
Ähnlich wie bei der SQL WHERE-Klausel
Entität löschen
Verwenden Sie den von Ihnen erstellten booleschen Ausdruck, um Entitäten zu löschen. Milvus gibt die Liste der gelöschten Entitäten zurück.
from pymilvus import Collection
collection = Collection("book") # Hole die vorhandene Collection.
collection.delete(expr)
Daten kompaktieren
Milvus unterstützt standardmäßig die automatische Datenkompression. Sie können Milvus konfigurieren, um die Kompression und automatische Kompression zu aktivieren oder zu deaktivieren.
Wenn die automatische Kompression deaktiviert ist, können Sie die Daten immer noch manuell komprimieren.
Daten manuell komprimieren
Da die Kompression in der Regel viel Zeit in Anspruch nimmt, werden Kompressionsanfragen asynchron verarbeitet.
from pymilvus import Collection
collection = Collection("book") # Hole die vorhandene Collection.
collection.compact()
Kompressionsstatus überprüfen
Sie können die Kompressions-ID verwenden, die zurückgegeben wird, wenn die manuelle Kompression ausgelöst wird, um den Kompressionsstatus zu überprüfen.
collection.get_compaction_state()