Comment migrer vos données vers Milvus en toute transparence : Un guide complet
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'ElasticsearchPrise 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
- 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.
- 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
.
- 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.
- 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.
L'interface Attu
Migration de Milvus 1.x vers Milvus 2.x
- 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 fichiermeta.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.
- 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
.
- 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.
- 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
- 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.
- 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
.
- 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.
- 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.
- Milvus Migration, un puissant outil de migration de données
- Migration d'Elasticsearch vers Milvus 2.x
- Migration de Milvus 1.x vers Milvus 2.x
- Migration de FAISS vers Milvus 2.x
- Restez à l'écoute pour les futurs plans de migration
- Conclusion
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word