🚀 Essayez Zilliz Cloud, la version entièrement gérée de Milvus, gratuitement—découvrez des performances 10x plus rapides ! Essayez maintenant>>

milvus-logo
LFAI
  • Home
  • Blog
  • Comment migrer vos données vers Milvus en toute transparence : Un guide complet

Comment migrer vos données vers Milvus en toute transparence : Un guide complet

  • Engineering
December 01, 2023
Wenhui Zhang

Milvus est une base de données vectorielles open-source robuste pour la recherche de similarités qui peut stocker, traiter et récupérer des milliards, voire des trillions de données vectorielles avec une latence minimale. Elle est également très évolutive, fiable, cloud-native et riche en fonctionnalités. La dernière version de Milvus présente encore plus de fonctionnalités et d'améliorations intéressantes, notamment la prise en charge des GPU pour des performances 10 fois plus rapides et MMap pour une plus grande capacité de stockage sur une seule machine.

En septembre 2023, Milvus a obtenu près de 23 000 étoiles sur GitHub et compte des dizaines de milliers d'utilisateurs issus de divers secteurs d'activité et ayant des besoins variés. Il devient encore plus populaire à mesure que la technologie d'IA générative comme ChatGPT devient plus répandue. Il s'agit d'un composant essentiel de plusieurs piles d'IA, en particulier le cadre de génération augmentée de recherche, qui aborde le problème de l'hallucination des modèles de langage de grande taille.

Pour répondre à la demande croissante des nouveaux utilisateurs qui souhaitent migrer vers Milvus et des utilisateurs existants qui souhaitent passer aux dernières versions de Milvus, nous avons développé Milvus Migration. Dans ce blog, nous allons explorer les fonctionnalités de Milvus Migration et vous guider dans la transition rapide de vos données vers Milvus à partir de Milvus 1.x, FAISS et Elasticsearch 7.0 et au-delà.

Milvus Migration, un puissant outil de migration de données

Milvus Migration est un outil de migration de données écrit en Go. Il permet aux utilisateurs de déplacer leurs données en toute transparence depuis les anciennes versions de Milvus (1.x), FAISS et Elasticsearch 7.0 et au-delà vers les versions Milvus 2.x.

Le diagramme ci-dessous montre comment nous avons construit Milvus Migration et comment il fonctionne.

Comment Milvus Migration migre les données

De Milvus 1.x et FAISS vers Milvus 2.x

La migration des données de Milvus 1.x et FAISS implique l'analyse du contenu des fichiers de données d'origine, leur transformation dans le format de stockage de données de Milvus 2.x et l'écriture des données à l'aide de bulkInsert du SDK Milvus. L'ensemble de ce processus est basé sur le flux, théoriquement limité uniquement par l'espace disque, et stocke les fichiers de données sur votre disque local, S3, OSS, GCP ou Minio.

D'Elasticsearch à Milvus 2.x

Dans la migration de données Elasticsearch, la récupération des données est différente. Les données ne sont pas obtenues à partir de fichiers mais séquentiellement à l'aide de l'API de défilement d'Elasticsearch. Les données sont ensuite analysées et transformées dans le format de stockage Milvus 2.x, puis écrites à l'aide de bulkInsert. Outre la migration des vecteurs de type dense_vector stockés dans Elasticsearch, Milvus Migration prend également en charge la migration d'autres types de champs, notamment long, entier, court, booléen, mot-clé, texte et double.

Ensemble de fonctionnalités de Milvus Migration

Milvus Migration simplifie le processus de migration grâce à son ensemble de fonctionnalités robustes :

  • Sources de données prises en charge :

    • Milvus 1.x à Milvus 2.x

    • Elasticsearch 7.0 et au-delà vers Milvus 2.x

    • FAISS vers Milvus 2.x

  • Modes d'interaction multiples :

    • Interface de ligne de commande (CLI) utilisant le cadre Cobra

    • Restful API avec une interface utilisateur Swagger intégrée

    • Intégration en tant que module Go dans d'autres outils

  • Prise en charge de formats de fichiers polyvalents :

    • Fichiers locaux

    • Amazon S3

    • Service de stockage d'objets (OSS)

    • Plate-forme Google Cloud (GCP)

  • Intégration flexible d'Elasticsearch :

    • Migration des vecteurs de type dense_vector à partir d'Elasticsearch

    • Prise en charge de la migration d'autres types de champs tels que long, integer, short, boolean, keyword, text et double

Définitions des interfaces

Milvus Migration fournit les interfaces clés suivantes :

  • /start: Lance un travail de migration (équivalent à une combinaison de vidage et de chargement, ne prend actuellement en charge que la migration ES).

  • /dump: Lance une tâche de vidage (écrit les données source sur le support de stockage cible).

  • /load: Lance une tâche de chargement (écrit les données du support de stockage cible dans Milvus 2.x).

  • /get_job: Permet aux utilisateurs de visualiser les résultats de l'exécution du travail. (Pour plus de détails, reportez-vous au fichier server.go du projet).

Ensuite, utilisons quelques données d'exemple pour explorer comment utiliser Milvus Migration dans cette section. Vous pouvez trouver ces exemples ici sur GitHub.

Migration d'Elasticsearch vers Milvus 2.x

  1. Préparation des données Elasticsearch

Pour migrer des données Elasticsearch, vous devez déjà configurer votre propre serveur Elasticsearch. Vous devez stocker les données vectorielles dans le champ dense_vector et les indexer avec d'autres champs. Les correspondances d'index sont indiquées ci-dessous.

  1. Compilation et construction

Tout d'abord, téléchargez le code source de Milvus Migration depuis GitHub. Ensuite, exécutez les commandes suivantes pour le compiler.

go get
go build

Cette étape génère un fichier exécutable nommé milvus-migration.

  1. Configurer migration.yaml

Avant de démarrer la migration, vous devez préparer un fichier de configuration nommé migration.yaml qui inclut des informations sur la source de données, la cible et d'autres paramètres pertinents. Voici un exemple de configuration :

# 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: ******

Pour une explication plus détaillée du fichier de configuration, reportez-vous à cette page sur GitHub.

  1. Exécuter la tâche de migration

Maintenant que vous avez configuré votre fichier migration.yaml, vous pouvez lancer la tâche de migration en exécutant la commande suivante :

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

Observez la sortie du journal. Si vous voyez des journaux similaires à ceux qui suivent, cela signifie que la migration s'est déroulée avec succès.

[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!"]

Outre l'approche en ligne de commande, Milvus Migration prend également en charge la migration à l'aide de Restful API.

Pour utiliser Restful API, démarrez le serveur API à l'aide de la commande suivante :

./milvus-migration server run -p 8080

Une fois le service exécuté, vous pouvez lancer la migration en appelant l'API.

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

Lorsque la migration est terminée, vous pouvez utiliser Attu, un outil d'administration de bases de données vectorielles tout-en-un, pour afficher le nombre total de lignes migrées avec succès et effectuer d'autres opérations liées à la collecte.

The Attu interface L'interface Attu

Migration de Milvus 1.x vers Milvus 2.x

  1. Préparation des données Milvus 1.x

Pour vous aider à découvrir rapidement le processus de migration, nous avons placé 10 000 enregistrements de données de test Milvus 1.x dans le code source de Milvus Migration. Toutefois, dans la réalité, vous devez exporter votre propre fichier meta.json à partir de votre instance Milvus 1.x avant de lancer le processus de migration.

  • Vous pouvez exporter les données à l'aide de la commande suivante.
./milvus-migration export -m "user:password@tcp(adderss)/milvus?charset=utf8mb4&parseTime=True&loc=Local" -o outputDir

Veillez à :

  • Remplacer les caractères de remplacement par vos identifiants MySQL réels.

  • Arrêter le serveur Milvus 1.x ou interrompre l'écriture des données avant d'effectuer cette exportation.

  • Copier le dossier Milvus tables et le fichier meta.json dans le même répertoire.

Remarque : Si vous utilisez Milvus 2.x sur Zilliz Cloud (le service entièrement géré de Milvus), vous pouvez démarrer la migration à l'aide de Cloud Console.

  1. Compiler et construire

Tout d'abord, téléchargez le code source de Milvus Migration depuis GitHub. Ensuite, exécutez les commandes suivantes pour le compiler.

go get
go build

Cette étape génère un fichier exécutable nommé milvus-migration.

  1. Configurer migration.yaml

Préparez un fichier de configuration migration.yaml, en spécifiant des détails sur la source, la cible et d'autres paramètres pertinents. Voici un exemple de configuration :

# 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

Pour une explication plus détaillée du fichier de configuration, reportez-vous à cette page sur GitHub.

  1. Exécuter le job de migration

Vous devez exécuter les commandes dump et load séparément pour terminer la migration. Ces commandes convertissent les données et les importent dans Milvus 2.x.

Remarque : Nous allons simplifier cette étape et permettre aux utilisateurs de terminer la migration à l'aide d'une seule commande prochainement. Restez à l'écoute.

Commande Dump :

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

Commande Load :

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

Après la migration, la collection générée dans Milvus 2.x contiendra deux champs : id et data. Vous pouvez obtenir plus de détails en utilisant Attu, un outil d'administration de base de données vectorielles tout-en-un.

Migration de FAISS vers Milvus 2.x

  1. Préparer les données FAISS

Pour migrer les données Elasticsearch, vous devez préparer vos propres données FAISS. Pour vous aider à découvrir rapidement le processus de migration, nous avons intégré des données de test FAISS dans le code source de Milvus Migration.

  1. Compiler et construire

Tout d'abord, téléchargez le code source de Milvus Migration sur GitHub. Ensuite, exécutez les commandes suivantes pour le compiler.

go get
go build

Cette étape génère un fichier exécutable nommé milvus-migration.

  1. Configurer migration.yaml

Préparez un fichier de configuration migration.yaml pour la migration FAISS, en spécifiant des détails sur la source, la cible et d'autres paramètres pertinents. Voici un exemple de configuration :

# 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

Pour une explication plus détaillée du fichier de configuration, reportez-vous à cette page sur GitHub.

  1. Exécuter la tâche de migration

Comme la migration de Milvus 1.x vers Milvus 2.x, la migration FAISS nécessite l'exécution des commandes dump et load. Ces commandes convertissent les données et les importent dans Milvus 2.x.

Remarque : Nous allons bientôt simplifier cette étape et permettre aux utilisateurs de terminer la migration à l'aide d'une seule commande. Restez à l'écoute.

Commande Dump :

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

Commande Load :

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

Vous pouvez obtenir plus de détails en utilisant Attu, un outil d'administration de base de données vectorielles tout-en-un.

Restez à l'écoute pour les futurs plans de migration

À l'avenir, nous prendrons en charge la migration à partir d'un plus grand nombre de sources de données et nous ajouterons d'autres fonctionnalités de migration, notamment :

  • Prise en charge de la migration de Redis vers Milvus.

  • Prise en charge de la migration de MongoDB vers Milvus.

  • Prise en charge de la migration avec reprise.

  • Simplification des commandes de migration en fusionnant les processus de chargement et de vidage en un seul.

  • Prise en charge de la migration à partir d'autres sources de données courantes vers Milvus.

Conclusion

Milvus 2.3, la dernière version de Milvus, apporte de nouvelles fonctionnalités intéressantes et des améliorations de performances qui répondent aux besoins croissants de la gestion des données. La migration de vos données vers Milvus 2.x peut débloquer ces avantages, et le projet Milvus Migration rend le processus de migration rationalisé et facile. Essayez-le, vous ne serez pas déçu.

Remarque : les informations contenues dans ce blog sont basées sur l'état des projets Milvus et Milvus Migration en septembre 2023. Consultez la documentation officielle de Milvus pour obtenir les informations et instructions les plus récentes.

Like the article? Spread the word

Continuer à Lire