Come migrare i tuoi dati a Milvus senza intoppi: una guida completa

Oct 02, 20238 min read

Milvus è un robusto database vettoriale open-source per la ricerca di similarità che può archiviare, elaborare e recuperare miliardi e persino trilioni di dati vettoriali con una latenza minima. È anche altamente scalabile, affidabile, cloud-native e ricco di funzionalità. La più recente release di Milvus introduce funzionalità e miglioramenti ancora più interessanti, tra cui il supporto GPU per prestazioni oltre 10 volte più rapide e MMap per una maggiore capacità di archiviazione su una singola macchina.

A settembre 2023, Milvus ha ottenuto quasi 23.000 stelle su GitHub e conta decine di migliaia di utenti provenienti da settori diversi con esigenze differenti. Sta diventando ancora più popolare man mano che tecnologie di IA generativa come ChatGPT diventano più diffuse. È un componente essenziale di vari stack di IA, in particolare del framework di retrieval augmented generation, che affronta il problema delle allucinazioni dei modelli linguistici di grandi dimensioni.

Per soddisfare la crescente domanda da parte di nuovi utenti che desiderano migrare a Milvus e di utenti esistenti che vogliono aggiornare alle versioni più recenti di Milvus, abbiamo sviluppato Milvus Migration. In questo blog, esploreremo le funzionalità di Milvus Migration e ti guideremo nel trasferire rapidamente i tuoi dati a Milvus da Milvus 1.x, FAISS ed Elasticsearch 7.0 e versioni successive.

Milvus Migration, un potente strumento di migrazione dei dati

Milvus Migration è uno strumento di migrazione dei dati scritto in Go. Consente agli utenti di spostare senza problemi i propri dati dalle versioni precedenti di Milvus (1.x), FAISS ed Elasticsearch 7.0 e versioni successive alle versioni Milvus 2.x.

Il diagramma seguente mostra come abbiamo creato Milvus Migration e come funziona.

Come Milvus Migration migra i dati

Da Milvus 1.x e FAISS a Milvus 2.x

La migrazione dei dati da Milvus 1.x e FAISS comporta l'analisi del contenuto dei file di dati originali, la loro trasformazione nel formato di archiviazione dei dati di Milvus 2.x e la scrittura dei dati utilizzando bulkInsert dell'SDK Milvus. Questo intero processo è basato su stream, teoricamente limitato solo dallo spazio su disco, e archivia i file di dati sul tuo disco locale, S3, OSS, GCP o Minio.

Da Elasticsearch a Milvus 2.x

Nella migrazione dei dati da Elasticsearch, il recupero dei dati è diverso. I dati non vengono ottenuti da file, ma recuperati in sequenza utilizzando la scroll API di Elasticsearch. I dati vengono quindi analizzati e trasformati nel formato di archiviazione Milvus 2.x, seguiti dalla scrittura tramite bulkInsert. Oltre a migrare vettori di tipo dense_vector archiviati in Elasticsearch, Milvus Migration supporta anche la migrazione di altri tipi di campo, tra cui long, integer, short, boolean, keyword, text e double.

Set di funzionalità di Milvus Migration

Milvus Migration semplifica il processo di migrazione grazie al suo robusto set di funzionalità:

  • Origini dati supportate:

    • Da Milvus 1.x a Milvus 2.x

    • Da Elasticsearch 7.0 e versioni successive a Milvus 2.x

    • Da FAISS a Milvus 2.x

  • Molteplici modalità di interazione:

    • Interfaccia a riga di comando (CLI) utilizzando il framework Cobra

    • API Restful con Swagger UI integrata

    • Integrazione come modulo Go in altri strumenti

  • Supporto versatile per formati di file:

    • File locali

    • Amazon S3

    • Object Storage Service (OSS)

    • Google Cloud Platform (GCP)

  • Integrazione flessibile con Elasticsearch:

    • Migrazione di vettori di tipo dense_vector da Elasticsearch

    • Supporto per la migrazione di altri tipi di campo come long, integer, short, boolean, keyword, text e double

Definizioni delle interfacce

Milvus Migration fornisce le seguenti interfacce chiave:

  • /start: Avvia un job di migrazione (equivalente a una combinazione di dump e load, attualmente supporta solo la migrazione ES).

  • /dump: Avvia un job di dump (scrive i dati di origine nel supporto di archiviazione di destinazione).

  • /load: Avvia un job di load (scrive i dati dal supporto di archiviazione di destinazione in Milvus 2.x).

  • /get_job: Consente agli utenti di visualizzare i risultati dell'esecuzione del job. (Per maggiori dettagli, fai riferimento a server.go del progetto)

Ora, usiamo alcuni dati di esempio per esplorare come utilizzare Milvus Migration in questa sezione. Puoi trovare questi esempi qui su GitHub.

Migrazione da Elasticsearch a Milvus 2.x

  1. Preparare i dati Elasticsearch

Per migrare dati Elasticsearch, dovresti aver già configurato il tuo server Elasticsearch. Dovresti archiviare i dati vettoriali nel campo dense_vector e indicizzarli con altri campi. Le mappature dell'indice sono mostrate di seguito.

  1. Compilare e creare

Per prima cosa, scarica il codice sorgente da GitHub di Milvus Migration. Quindi, esegui i seguenti comandi per compilarlo.

go get
go build

Questo passaggio genererà un file eseguibile denominato milvus-migration.

  1. Configurare migration.yaml

Prima di avviare la migrazione, devi preparare un file di configurazione denominato migration.yaml che includa informazioni sull'origine dati, sulla destinazione e su altre impostazioni rilevanti. Ecco un esempio di configurazione:

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

Per una spiegazione più dettagliata del file di configurazione, fai riferimento a questa pagina su GitHub.

  1. Eseguire il job di migrazione

Ora che hai configurato il tuo file migration.yaml, puoi avviare l'attività di migrazione eseguendo il seguente comando:

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

Osserva l'output del log. Quando vedi log simili ai seguenti, significa che la migrazione è riuscita.

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

Oltre all'approccio da riga di comando, Milvus Migration supporta anche la migrazione tramite Restful API.

Per usare la Restful API, avvia il server API usando il seguente comando:

./milvus-migration server run -p 8080

Una volta che il servizio è in esecuzione, puoi avviare la migrazione chiamando l'API.

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

Al termine della migrazione, puoi usare Attu, uno strumento all-in-one per l'amministrazione di database vettoriali, per visualizzare il numero totale di righe migrate con successo ed eseguire altre operazioni relative alle raccolte.

L'interfaccia di Attu L'interfaccia di Attu

Migrazione da Milvus 1.x a Milvus 2.x

  1. Prepara i dati di Milvus 1.x

Per aiutarti a sperimentare rapidamente il processo di migrazione, abbiamo inserito 10.000 record di dati di test Milvus 1.x nel codice sorgente di Milvus Migration. Tuttavia, nei casi reali, devi esportare il tuo file meta.json dalla tua istanza Milvus 1.x prima di avviare il processo di migrazione.

  • Puoi esportare i dati con il seguente comando.
./milvus-migration export -m "user:password@tcp(adderss)/milvus?charset=utf8mb4&parseTime=True&loc=Local" -o outputDir

Assicurati di:

  • Sostituire i segnaposto con le tue credenziali MySQL effettive.

  • Arrestare il server Milvus 1.x o interrompere le scritture dei dati prima di eseguire questa esportazione.

  • Copiare la cartella tables di Milvus e il file meta.json nella stessa directory.

Nota: Se usi Milvus 2.x su Zilliz Cloud (il servizio completamente gestito di Milvus), puoi avviare la migrazione usando Cloud Console.

  1. Compila e crea la build

Per prima cosa, scarica il codice sorgente da GitHub di Milvus Migration. Quindi, esegui i seguenti comandi per compilarlo.

go get
go build

Questo passaggio genererà un file eseguibile denominato milvus-migration.

  1. Configura migration.yaml

Prepara un file di configurazione migration.yaml, specificando i dettagli sulla sorgente, sulla destinazione e su altre impostazioni pertinenti. Ecco un esempio di configurazione:

# 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

Per una spiegazione più dettagliata del file di configurazione, consulta questa pagina su GitHub.

  1. Esegui il job di migrazione

Devi eseguire separatamente i comandi dump e load per completare la migrazione. Questi comandi convertono i dati e li importano in Milvus 2.x.

Nota: A breve semplificheremo questo passaggio e consentiremo agli utenti di completare la migrazione usando un solo comando. Resta sintonizzato.

Comando Dump:

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

Comando Load:

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

Dopo la migrazione, la collection generata in Milvus 2.x conterrà due campi: id e data. Puoi visualizzare maggiori dettagli usando Attu, uno strumento all-in-one per l’amministrazione di database vettoriali.

Migrazione da FAISS a Milvus 2.x

  1. Prepara i dati FAISS

Per migrare i dati Elasticsearch, dovresti avere pronti i tuoi dati FAISS. Per aiutarti a provare rapidamente il processo di migrazione, abbiamo inserito alcuni dati di test FAISS nel codice sorgente di Milvus Migration.

  1. Compila e crea la build

Per prima cosa, scarica il codice sorgente da GitHub di Milvus Migration. Quindi, esegui i seguenti comandi per compilarlo.

go get
go build

Questo passaggio genererà un file eseguibile denominato milvus-migration.

  1. Configura migration.yaml

Prepara un file di configurazione migration.yaml per la migrazione FAISS, specificando i dettagli relativi all’origine, alla destinazione e ad altre impostazioni pertinenti. Ecco un esempio di configurazione:

# 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

Per una spiegazione più dettagliata del file di configurazione, consulta questa pagina su GitHub.

  1. Esegui il job di migrazione

Come per la migrazione da Milvus 1.x a Milvus 2.x, la migrazione FAISS richiede l’esecuzione di entrambi i comandi dump e load. Questi comandi convertono i dati e li importano in Milvus 2.x.

Nota: A breve semplificheremo questo passaggio e consentiremo agli utenti di completare la migrazione usando un solo comando. Resta sintonizzato.

Comando Dump:

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

Comando Load:

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

Puoi visualizzare maggiori dettagli usando Attu, uno strumento all-in-one per l’amministrazione di database vettoriali.

Resta sintonizzato per i futuri piani di migrazione

In futuro, supporteremo la migrazione da più sorgenti dati e aggiungeremo altre funzionalità di migrazione, tra cui:

  • Supporto per la migrazione da Redis a Milvus.

  • Supporto per la migrazione da MongoDB a Milvus.

  • Supporto per la migrazione riprendibile.

  • Semplificazione dei comandi di migrazione unendo i processi di dump e load in uno solo.

  • Supporto per la migrazione da altre sorgenti dati mainstream a Milvus.

Conclusione

Milvus 2.3, l'ultima release di Milvus, offre nuove entusiasmanti funzionalità e miglioramenti delle prestazioni che rispondono alle crescenti esigenze della gestione dei dati. Migrare i tuoi dati a Milvus 2.x può sbloccare questi vantaggi, e il progetto Milvus Migration rende il processo di migrazione snello e semplice. Provalo e non rimarrai deluso.

Nota: Le informazioni in questo blog si basano sullo stato dei progetti Milvus e Milvus Migration a settembre 2023. Consulta la documentazione ufficiale di Milvus per le informazioni e le istruzioni più aggiornate.

Aggiornato il Jul 09, 2026