🚀 Testen Sie Zilliz Cloud, die vollständig verwaltete Milvus, kostenlos – erleben Sie 10x schnellere Leistung! Jetzt testen>>

milvus-logo
LFAI
  • Home
  • Blog
  • Wie Sie Ihre Daten nahtlos zu Milvus migrieren: Ein umfassender Leitfaden

Wie Sie Ihre Daten nahtlos zu Milvus migrieren: Ein umfassender Leitfaden

  • Engineering
December 01, 2023
Wenhui Zhang

Milvus ist eine robuste Open-Source-Vektordatenbank für die Ähnlichkeitssuche, die Milliarden und sogar Billionen von Vektordaten mit minimaler Latenzzeit speichern, verarbeiten und abrufen kann. Außerdem ist sie hoch skalierbar, zuverlässig, Cloud-nativ und funktionsreich. Die neueste Version von Milvus bietet noch mehr aufregende Funktionen und Verbesserungen, darunter GPU-Unterstützung für eine über 10-fach schnellere Leistung und MMap für eine größere Speicherkapazität auf einem einzigen Rechner.

Bis September 2023 hat Milvus fast 23.000 Sterne auf GitHub erhalten und hat Zehntausende von Nutzern aus verschiedenen Branchen mit unterschiedlichen Anforderungen. Mit der zunehmenden Verbreitung von generativer KI-Technologie wie ChatGPT wird Milvus immer beliebter. Es ist ein wesentlicher Bestandteil verschiedener KI-Stacks, insbesondere des Retrieval Augmented Generation Frameworks, das das Problem der Halluzinationen bei großen Sprachmodellen angeht.

Um die wachsende Nachfrage von neuen Nutzern zu befriedigen, die zu Milvus migrieren wollen, und von bestehenden Nutzern, die auf die neuesten Milvus-Versionen aktualisieren wollen, haben wir Milvus Migration entwickelt. In diesem Blog stellen wir Ihnen die Funktionen von Milvus Migration vor und zeigen Ihnen, wie Sie Ihre Daten von Milvus 1.x, FAISS und Elasticsearch 7.0 und darüber hinaus schnell zu Milvus migrieren können.

Milvus Migration, ein leistungsstarkes Werkzeug zur Datenmigration

Milvus Migration ist ein in Go geschriebenes Datenmigrationstool. Es ermöglicht Nutzern, ihre Daten nahtlos von älteren Versionen von Milvus (1.x), FAISS und Elasticsearch 7.0 und darüber hinaus auf Milvus 2.x Versionen zu übertragen.

Das folgende Diagramm zeigt, wie wir Milvus Migration entwickelt haben und wie es funktioniert.

Wie Milvus Migration Daten migriert

Von Milvus 1.x und FAISS zu Milvus 2.x

Die Datenmigration von Milvus 1.x und FAISS beinhaltet das Parsen des Inhalts der ursprünglichen Datendateien, die Umwandlung in das Datenspeicherformat von Milvus 2.x und das Schreiben der Daten unter Verwendung des Milvus SDK's bulkInsert. Dieser gesamte Prozess ist stream-basiert, theoretisch nur durch den Speicherplatz begrenzt und speichert Datendateien auf Ihrer lokalen Festplatte, S3, OSS, GCP oder Minio.

Von Elasticsearch zu Milvus 2.x

Bei der Datenmigration von Elasticsearch ist die Datenbeschaffung anders. Die Daten werden nicht aus Dateien abgerufen, sondern sequentiell über die Scroll-API von Elasticsearch abgerufen. Die Daten werden dann geparst und in das Milvus 2.x-Speicherformat umgewandelt und anschließend mit bulkInsert geschrieben. Neben der Migration von Vektoren des Typs dense_vector, die in Elasticsearch gespeichert sind, unterstützt Milvus Migration auch die Migration anderer Feldtypen, einschließlich long, integer, short, boolean, keyword, text und double.

Funktionsumfang von Milvus Migration

Milvus Migration vereinfacht den Migrationsprozess durch seinen robusten Funktionsumfang:

  • Unterstützte Datenquellen:

    • Milvus 1.x bis Milvus 2.x

    • Elasticsearch 7.0 und höher nach Milvus 2.x

    • FAISS zu Milvus 2.x

  • Mehrere Interaktionsmodi:

    • Befehlszeilenschnittstelle (CLI) unter Verwendung des Cobra-Frameworks

    • Restful API mit einer eingebauten Swagger UI

    • Integration als Go-Modul in andere Tools

  • Vielseitige Unterstützung von Dateiformaten:

    • Lokale Dateien

    • Amazon S3

    • Objektspeicherdienst (OSS)

    • Google Wolkenplattform (GCP)

  • Flexible Elasticsearch-Integration:

    • Migration von Vektoren des Typs dense_vector aus Elasticsearch

    • Unterstützung für die Migration anderer Feldtypen wie long, integer, short, boolean, keyword, text und double

Schnittstellen-Definitionen

Milvus Migration bietet die folgenden Schlüsselschnittstellen:

  • /start: Initiieren eines Migrationsauftrags (entspricht einer Kombination aus Dump und Load, unterstützt derzeit nur ES-Migration).

  • /dump: Initiiert einen Dump-Auftrag (schreibt Quelldaten auf das Zielspeichermedium).

  • /load: Initiiert einen Ladeauftrag (schreibt Daten vom Zielspeichermedium in Milvus 2.x).

  • /get_job: Ermöglicht es den Benutzern, die Ergebnisse der Auftragsausführung anzuzeigen. (Weitere Details finden Sie in der server.go des Projekts)

Als Nächstes wollen wir anhand einiger Beispieldaten untersuchen, wie Milvus Migration in diesem Abschnitt verwendet wird. Sie können diese Beispiele hier auf GitHub finden.

Migration von Elasticsearch zu Milvus 2.x

  1. Elasticsearch-Daten vorbereiten

Um Elasticsearch-Daten zu migrieren, sollten Sie bereits Ihren eigenen Elasticsearch-Server eingerichtet haben. Sie sollten Vektordaten im Feld dense_vector speichern und sie mit anderen Feldern indizieren. Die Index-Zuordnungen sind wie unten gezeigt.

  1. Kompilieren und Erstellen

Laden Sie zunächst den Quellcode der Milvus-Migration von GitHub herunter. Führen Sie dann die folgenden Befehle aus, um sie zu kompilieren.

go get
go build

Bei diesem Schritt wird eine ausführbare Datei mit dem Namen milvus-migration erzeugt.

  1. Konfigurieren Sie migration.yaml

Bevor Sie die Migration starten, müssen Sie eine Konfigurationsdatei mit dem Namen migration.yaml vorbereiten, die Informationen über die Datenquelle, das Ziel und andere relevante Einstellungen enthält. Hier sehen Sie eine Beispielkonfiguration:

# Configuration for Elasticsearch to Milvus 2.x migration


dumper:
  worker:
    workMode: Elasticsearch
    reader:
      bufferSize: 2500
meta:
  mode: config
  index: test_index
  fields:
    - name: id
      pk: true
      type: long
    - name: other_field
      maxLen: 60
      type: keyword
    - name: data
      type: dense_vector
      dims: 512
  milvus:
      collection: "rename_index_test"
      closeDynamicField: false
      consistencyLevel: Eventually
      shardNum: 1


source:
  es:
    urls:
      - http://localhost:9200
    username: xxx
    password: xxx


target:
  mode: remote
  remote:
    outputDir: outputPath/migration/test1
    cloud: aws
    region: us-west-2
    bucket: xxx
    useIAM: true
    checkBucket: false
  milvus2x:
    endpoint: {yourMilvusAddress}:{port}
    username: ******
    password: ******

Eine ausführlichere Erläuterung der Konfigurationsdatei finden Sie auf dieser Seite auf GitHub.

  1. Ausführen des Migrationsauftrags

Nachdem Sie Ihre migration.yaml Datei konfiguriert haben, können Sie den Migrationsauftrag starten, indem Sie den folgenden Befehl ausführen:

./milvus-migration start --config=/{YourConfigFilePath}/migration.yaml

Beobachten Sie die Protokollausgabe. Wenn Sie ähnliche Protokolle wie die folgenden sehen, bedeutet dies, dass die Migration erfolgreich war.

[task/load_base_task.go:94] ["[LoadTasker] Dec Task Processing-------------->"] [Count=0] [fileName=testfiles/output/zwh/migration/test_mul_field4/data_1_1.json] [taskId=442665677354739304][task/load_base_task.go:76] ["[LoadTasker] Progress Task --------------->"] [fileName=testfiles/output/zwh/migration/test_mul_field4/data_1_1.json] [taskId=442665677354739304][dbclient/cus_field_milvus2x.go:86] ["[Milvus2x] begin to ShowCollectionRows"][loader/cus_milvus2x_loader.go:66] ["[Loader] Static: "] [collection=test_mul_field4_rename1] [beforeCount=50000] [afterCount=100000] [increase=50000][loader/cus_milvus2x_loader.go:66] ["[Loader] Static Total"] ["Total Collections"=1] [beforeTotalCount=50000] [afterTotalCount=100000] [totalIncrease=50000][migration/es_starter.go:25] ["[Starter] migration ES to Milvus finish!!!"] [Cost=80.009174459][starter/starter.go:106] ["[Starter] Migration Success!"] [Cost=80.00928425][cleaner/remote_cleaner.go:27] ["[Remote Cleaner] Begin to clean files"] [bucket=a-bucket] [rootPath=testfiles/output/zwh/migration][cmd/start.go:32] ["[Cleaner] clean file success!"]

Neben dem Befehlszeilenansatz unterstützt Milvus Migration auch die Migration über die Restful API.

Um die Restful-API zu verwenden, starten Sie den API-Server mit dem folgenden Befehl:

./milvus-migration server run -p 8080

Sobald der Dienst läuft, können Sie die Migration durch den Aufruf der API einleiten.

curl -XPOST http://localhost:8080/api/v1/start

Wenn die Migration abgeschlossen ist, können Sie Attu, ein All-in-One-Tool zur Verwaltung von Vektordatenbanken, verwenden, um die Gesamtzahl der erfolgreich migrierten Zeilen anzuzeigen und andere sammlungsbezogene Vorgänge durchzuführen.

The Attu interface Die Attu-Schnittstelle

Migration von Milvus 1.x nach Milvus 2.x

  1. Vorbereiten von Milvus 1.x-Daten

Damit Sie den Migrationsprozess schnell erleben können, haben wir 10.000 Milvus 1.x Testdatensätze in den Quellcode von Milvus Migration eingefügt. In echten Fällen müssen Sie jedoch Ihre eigene meta.json Datei aus Ihrer Milvus 1.x Instanz exportieren, bevor Sie den Migrationsprozess starten.

  • Sie können die Daten mit dem folgenden Befehl exportieren.
./milvus-migration export -m "user:password@tcp(adderss)/milvus?charset=utf8mb4&parseTime=True&loc=Local" -o outputDir

Achten Sie darauf:

  • Ersetzen Sie die Platzhalter durch Ihre tatsächlichen MySQL-Anmeldedaten.

  • Halten Sie den Milvus 1.x-Server an oder stoppen Sie die Datenübertragung, bevor Sie diesen Export durchführen.

  • Kopieren Sie den Ordner Milvus tables und die Datei meta.json in das gleiche Verzeichnis.

Hinweis: Wenn Sie Milvus 2.x auf der Zilliz Cloud (dem vollständig verwalteten Dienst von Milvus) verwenden, können Sie die Migration über die Cloud Console starten.

  1. Kompilieren und Erstellen

Laden Sie zunächst den Quellcode der Milvus-Migration von GitHub herunter. Führen Sie dann die folgenden Befehle aus, um ihn zu kompilieren.

go get
go build

Bei diesem Schritt wird eine ausführbare Datei mit dem Namen milvus-migration erzeugt.

  1. Konfigurieren Sie migration.yaml

Bereiten Sie eine migration.yaml Konfigurationsdatei vor, die Details über die Quelle, das Ziel und andere relevante Einstellungen angibt. Hier ist eine Beispielkonfiguration:

# Configuration for Milvus 1.x to Milvus 2.x migration


dumper:
  worker:
    limit: 2
    workMode: milvus1x
    reader:
      bufferSize: 1024
    writer:
      bufferSize: 1024
loader:
  worker:
    limit: 16
meta:
  mode: local
  localFile: /outputDir/test/meta.json


source:
  mode: local
  local:
    tablesDir: /db/tables/


target:
  mode: remote
  remote:
    outputDir: "migration/test/xx"
    ak: xxxx
    sk: xxxx
    cloud: aws
    endpoint: 0.0.0.0:9000
    region: ap-southeast-1
    bucket: a-bucket
    useIAM: false
    useSSL: false
    checkBucket: true
  milvus2x:
    endpoint: localhost:19530
    username: xxxxx
    password: xxxxx

Eine ausführlichere Erläuterung der Konfigurationsdatei finden Sie auf dieser Seite auf GitHub.

  1. Ausführen des Migrationsauftrags

Sie müssen die Befehle dump und load separat ausführen, um die Migration abzuschließen. Diese Befehle konvertieren die Daten und importieren sie in Milvus 2.x.

Hinweis: In Kürze werden wir diesen Schritt vereinfachen und es den Benutzern ermöglichen, die Migration mit nur einem Befehl abzuschließen. Bleiben Sie dran.

Befehl Dump:

./milvus-migration dump --config=/{YourConfigFilePath}/migration.yaml

Befehl Laden:

./milvus-migration load --config=/{YourConfigFilePath}/migration.yaml

Nach der Migration enthält die generierte Sammlung in Milvus 2.x zwei Felder: id und data. Weitere Details können Sie mit Attu, einem All-in-One-Tool zur Verwaltung von Vektordatenbanken, anzeigen.

Migration von FAISS zu Milvus 2.x

  1. FAISS-Daten vorbereiten

Um Elasticsearch-Daten zu migrieren, sollten Sie Ihre eigenen FAISS-Daten bereithalten. Um Ihnen zu helfen, den Migrationsprozess schnell zu erleben, haben wir einige FAISS-Testdaten in den Quellcode von Milvus Migration eingefügt.

  1. Kompilieren und Erstellen

Laden Sie zunächst den Quellcode von Milvus Migration von GitHub herunter. Führen Sie dann die folgenden Befehle aus, um ihn zu kompilieren.

go get
go build

In diesem Schritt wird eine ausführbare Datei mit dem Namen milvus-migration erzeugt.

  1. Konfigurieren Sie migration.yaml

Bereiten Sie eine migration.yaml Konfigurationsdatei für die FAISS-Migration vor, in der Sie Details über die Quelle, das Ziel und andere relevante Einstellungen angeben. Hier ist eine Beispielkonfiguration:

# Configuration for FAISS to Milvus 2.x migration


dumper:
  worker:
    limit: 2
    workMode: FAISS
    reader:
      bufferSize: 1024
    writer:
      bufferSize: 1024
loader:
  worker:
    limit: 2
source:
  mode: local
  local:
    FAISSFile: ./testfiles/FAISS/FAISS_ivf_flat.index


target:
  create:
    collection:
      name: test1w
      shardsNums: 2
      dim: 256
      metricType: L2
  mode: remote
  remote:
    outputDir: testfiles/output/
    cloud: aws
    endpoint: 0.0.0.0:9000
    region: ap-southeast-1
    bucket: a-bucket
    ak: minioadmin
    sk: minioadmin
    useIAM: false
    useSSL: false
    checkBucket: true
  milvus2x:
    endpoint: localhost:19530
    username: xxxxx
    password: xxxxx

Eine ausführlichere Erläuterung der Konfigurationsdatei finden Sie auf dieser Seite auf GitHub.

  1. Ausführen des Migrationsauftrags

Wie die Migration von Milvus 1.x nach Milvus 2.x erfordert auch die FAISS-Migration die Ausführung der Befehle dump und load. Diese Befehle konvertieren die Daten und importieren sie in Milvus 2.x.

Hinweis: Wir werden diesen Schritt vereinfachen und den Benutzern ermöglichen, die Migration in Kürze mit nur einem Befehl abzuschließen. Bleiben Sie dran.

Befehl Dump:

./milvus-migration dump --config=/{YourConfigFilePath}/migration.yaml

Load-Befehl:

./milvus-migration load --config=/{YourConfigFilePath}/migration.yaml

Weitere Details können Sie mit Attu, einem All-in-One-Tool zur Verwaltung von Vektordatenbanken, anzeigen.

Bleiben Sie dran für zukünftige Migrationspläne

In Zukunft werden wir die Migration von mehr Datenquellen unterstützen und weitere Migrationsfunktionen hinzufügen, einschließlich:

  • Unterstützung der Migration von Redis zu Milvus.

  • Unterstützung der Migration von MongoDB zu Milvus.

  • Unterstützung der wiederaufnehmbaren Migration.

  • Vereinfachung der Migrationsbefehle durch Zusammenlegung der Dump- und Ladeprozesse in einen einzigen.

  • Unterstützung der Migration von anderen Mainstream-Datenquellen zu Milvus.

Fazit

Milvus 2.3, die neueste Version von Milvus, bringt aufregende neue Funktionen und Leistungsverbesserungen, die den wachsenden Anforderungen des Datenmanagements gerecht werden. Die Migration Ihrer Daten zu Milvus 2.x kann diese Vorteile freisetzen, und das Milvus-Migrationsprojekt macht den Migrationsprozess rationell und einfach. Probieren Sie es aus, und Sie werden nicht enttäuscht sein.

Hinweis: Die Informationen in diesem Blog basieren auf dem Stand des Milvus- und Milvus Migration-Projekts im September 2023. In der offiziellen Milvus-Dokumentation finden Sie die aktuellsten Informationen und Anleitungen.

Like the article? Spread the word

Weiterlesen