🚀 Prova Zilliz Cloud, la versione completamente gestita di Milvus, gratuitamente—sperimenta prestazioni 10 volte più veloci! Prova Ora>>

milvus-logo
LFAI
  • Home
  • Blog
  • Come migrare i dati a Milvus senza problemi: Una guida completa

Come migrare i dati a Milvus senza problemi: Una guida completa

  • Engineering
December 01, 2023
Wenhui Zhang

Milvus è un robusto database vettoriale open-source per la ricerca di similarità, in grado di memorizzare, elaborare e recuperare miliardi e persino trilioni di dati vettoriali con una latenza minima. È inoltre altamente scalabile, affidabile, cloud-native e ricco di funzionalità. L'ultima versione di Milvus introduce caratteristiche e miglioramenti ancora più interessanti, tra cui il supporto delle GPU per prestazioni più veloci di 10 volte e MMap per una maggiore capacità di archiviazione su una singola macchina.

A settembre 2023, Milvus ha guadagnato quasi 23.000 stelle su GitHub e conta decine di migliaia di utenti provenienti da diversi settori con esigenze diverse. Sta diventando ancora più popolare con la diffusione di tecnologie di IA generativa come ChatGPT. È un componente essenziale di vari stack di IA, in particolare del framework di generazione aumentata del retrieval, che risolve il problema dell'allucinazione dei modelli linguistici di grandi dimensioni.

Per soddisfare la crescente domanda di nuovi utenti che desiderano migrare a Milvus e di utenti esistenti che desiderano aggiornarsi alle ultime versioni di Milvus, abbiamo sviluppato Milvus Migration. In questo blog esploreremo le caratteristiche di Milvus Migration e vi guideremo nel passaggio rapido dei vostri dati a Milvus da Milvus 1.x, FAISS ed Elasticsearch 7.0 e oltre.

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 i propri dati senza problemi dalle versioni precedenti di Milvus (1.x), FAISS ed Elasticsearch 7.0 e oltre, alle versioni Milvus 2.x.

Il diagramma seguente mostra come abbiamo costruito 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 il parsing 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 l'SDK di Milvus bulkInsert. L'intero processo è basato sul flusso, teoricamente limitato solo dallo spazio su disco, e memorizza i file di dati sul disco locale, S3, OSS, GCP o Minio.

Da Elasticsearch a Milvus 2.x

Nella migrazione dei dati Elasticsearch, il recupero dei dati è diverso. I dati non sono ottenuti da file, ma vengono recuperati in modo sequenziale utilizzando l'API di scorrimento di Elasticsearch. I dati vengono poi analizzati e trasformati nel formato di archiviazione di Milvus 2.x, quindi vengono scritti usando bulkInsert. Oltre alla migrazione di vettori di tipo dense_vector memorizzati in Elasticsearch, Milvus Migration supporta anche la migrazione di altri tipi di campi, tra cui long, integer, short, boolean, keyword, text e double.

Caratteristiche di Milvus Migration

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

  • Sorgenti di dati supportate:

    • Da Milvus 1.x a Milvus 2.x

    • Elasticsearch 7.0 e successivi a Milvus 2.x

    • FAISS a Milvus 2.x

  • Modalità di interazione multiple:

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

    • API Restful con interfaccia utente Swagger integrata

    • Integrazione come modulo Go in altri strumenti

  • Supporto di formati di file versatili:

    • File locali

    • Amazon S3

    • Servizio di archiviazione a oggetti (OSS)

    • Piattaforma cloud di Google (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 dell'interfaccia

Milvus Migration fornisce le seguenti interfacce chiave:

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

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

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

  • /get_job: Consente agli utenti di visualizzare i risultati dell'esecuzione del lavoro. (Per maggiori dettagli, consultare il server.go del progetto).

Utilizziamo quindi alcuni dati di esempio per esplorare l'uso di Milvus Migration in questa sezione. Potete trovare questi esempi qui su GitHub.

Migrazione da Elasticsearch a Milvus 2.x

  1. Preparare i dati Elasticsearch

Per migrare i dati Elasticsearch, è necessario aver già configurato il proprio server Elasticsearch. È necessario memorizzare i dati vettoriali nel campo dense_vector e indicizzarli con altri campi. Le mappature degli indici sono illustrate di seguito.

  1. Compilazione e compilazione

Innanzitutto, scaricare il codice sorgente di Milvus Migration da GitHub. Quindi, eseguire i seguenti comandi per compilarlo.

go get
go build

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

  1. Configurazione migration.yaml

Prima di avviare la migrazione, è necessario preparare un file di configurazione chiamato migration.yaml che includa informazioni sull'origine dei dati, sulla destinazione e 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, consultare questa pagina su GitHub.

  1. Eseguire il lavoro di migrazione

Dopo aver configurato il file migration.yaml, è possibile avviare l'attività di migrazione eseguendo il comando seguente:

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

Osservare l'output del log. Se si visualizzano log simili ai seguenti, significa che la migrazione è avvenuta con successo.

[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 API Restful.

Per utilizzare Restful API, avviare il server API con il seguente comando:

./milvus-migration server run -p 8080

Una volta eseguito il servizio, è possibile avviare la migrazione chiamando l'API.

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

Una volta completata la migrazione, è possibile utilizzare Attu, uno strumento di amministrazione del database vettoriale tutto in uno, per visualizzare il numero totale di righe migrate con successo ed eseguire altre operazioni relative alla raccolta.

The Attu interface L'interfaccia di Attu

Migrazione da Milvus 1.x a Milvus 2.x

  1. Preparare i dati di Milvus 1.x

Per aiutarvi a sperimentare rapidamente il processo di migrazione, abbiamo inserito 10.000 record di dati Milvus 1.x di prova nel codice sorgente di Milvus Migration. Tuttavia, nei casi reali, è necessario esportare il proprio file meta.json dalla propria istanza Milvus 1.x prima di avviare il processo di migrazione.

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

Assicurarsi di:

  • Sostituire i segnaposto con le credenziali MySQL reali.

  • Fermare il server Milvus 1.x o interrompere la scrittura dei dati prima di eseguire questa esportazione.

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

Nota: se utilizzate Milvus 2.x su Zilliz Cloud (il servizio completamente gestito di Milvus), potete avviare la migrazione utilizzando Cloud Console.

  1. Compilazione e creazione

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

go get
go build

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

  1. Configurare migration.yaml

Preparare un file di configurazione migration.yaml, specificando i dettagli sulla sorgente, la destinazione e altre impostazioni rilevanti. 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, consultare questa pagina su GitHub.

  1. Eseguire il lavoro di migrazione

Per completare la migrazione, è necessario eseguire separatamente 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 con un solo comando. Restate sintonizzati.

Comando di scarico:

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

Comando di caricamento:

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

Dopo la migrazione, la collezione generata in Milvus 2.x conterrà due campi: id e data. È possibile visualizzare maggiori dettagli utilizzando Attu, uno strumento di amministrazione di database vettoriali all-in-one.

Migrazione da FAISS a Milvus 2.x

  1. Preparare i dati FAISS

Per migrare i dati Elasticsearch, è necessario preparare i propri dati FAISS. Per aiutarvi a sperimentare rapidamente il processo di migrazione, abbiamo inserito alcuni dati di prova FAISS nel codice sorgente di Milvus Migration.

  1. Compilazione e compilazione

Innanzitutto, scaricare il codice sorgente di Milvus Migration da GitHub. Quindi, eseguire i seguenti comandi per compilarlo.

go get
go build

Questo passo genererà un file eseguibile chiamato milvus-migration.

  1. Configurare migration.yaml

Preparare un file di configurazione migration.yaml per la migrazione FAISS, specificando i dettagli relativi alla sorgente, alla destinazione e ad altre impostazioni rilevanti. 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, consultare questa pagina su GitHub.

  1. Eseguire il lavoro di migrazione

Come la migrazione da Milvus 1.x a Milvus 2.x, la migrazione FAISS richiede l'esecuzione dei 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 con un solo comando. Restate sintonizzati.

Comando Dump:

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

Comando di caricamento:

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

È possibile visualizzare ulteriori dettagli utilizzando Attu, uno strumento di amministrazione di database vettoriali all-in-one.

Rimanete sintonizzati per i futuri piani di migrazione

In futuro, supporteremo la migrazione da altre fonti di dati e aggiungeremo altre funzioni di migrazione, tra cui:

  • Supporto della migrazione da Redis a Milvus.

  • Supporto della migrazione da MongoDB a Milvus.

  • Supporto della migrazione con ripresa.

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

  • Supporto della migrazione da altre fonti di dati mainstream a Milvus.

Conclusione

Milvus 2.3, l'ultima versione di Milvus, offre nuove interessanti funzionalità e miglioramenti delle prestazioni che rispondono alle crescenti esigenze di gestione dei dati. La migrazione dei dati a Milvus 2.x può sbloccare questi vantaggi e il progetto Milvus Migration rende il processo di migrazione semplice e snello. Provate e non rimarrete delusi.

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

Like the article? Spread the word

Continua a Leggere