🚀 Experimente o Zilliz Cloud, o Milvus totalmente gerenciado, gratuitamente—experimente um desempenho 10x mais rápido! Experimente Agora>>

milvus-logo
LFAI

HomeBlogsComo migrar os seus dados para Milvus sem problemas: Um guia completo

Como migrar os seus dados para Milvus sem problemas: Um guia completo

  • Engineering
December 01, 2023
Wenhui Zhang

O Milvus é uma base de dados vetorial robusta de código aberto para pesquisa de semelhanças que pode armazenar, processar e recuperar milhares de milhões e até triliões de dados vectoriais com uma latência mínima. É também altamente escalável, fiável, nativo da nuvem e rico em funcionalidades. A versão mais recente do Milvus apresenta recursos e melhorias ainda mais interessantes, incluindo suporte a GPU para desempenho 10x mais rápido e MMap para maior capacidade de armazenamento em uma única máquina.

Em setembro de 2023, Milvus ganhou quase 23.000 estrelas no GitHub e tem dezenas de milhares de usuários de diversos setores com necessidades variadas. Está a tornar-se ainda mais popular à medida que a tecnologia de IA generativa como o ChatGPT se torna mais prevalecente. É um componente essencial de várias pilhas de IA, especialmente a estrutura de geração aumentada de recuperação, que aborda o problema de alucinação de grandes modelos de linguagem.

Para responder à procura crescente de novos utilizadores que pretendem migrar para o Milvus e de utilizadores existentes que pretendem atualizar para as versões mais recentes do Milvus, desenvolvemos o Milvus Migration. Neste blogue, vamos explorar as funcionalidades do Milvus Migration e guiá-lo na transição rápida dos seus dados para o Milvus a partir do Milvus 1.x, do FAISS e do Elasticsearch 7.0 e posteriores.

Milvus Migration, uma poderosa ferramenta de migração de dados

O Milvus Migration é uma ferramenta de migração de dados escrita em Go. Permite aos utilizadores moverem os seus dados sem problemas de versões mais antigas do Milvus (1.x), FAISS e Elasticsearch 7.0 e posteriores para versões do Milvus 2.x.

O diagrama abaixo demonstra como criámos o Milvus Migration e como funciona.

Como o Milvus Migration migra os dados

Do Milvus 1.x e FAISS para o Milvus 2.x

A migração de dados do Milvus 1.x e do FAISS envolve a análise do conteúdo dos ficheiros de dados originais, a sua transformação para o formato de armazenamento de dados do Milvus 2.x e a escrita dos dados utilizando o SDK do Milvus bulkInsert. Todo este processo é baseado em fluxo, teoricamente limitado apenas pelo espaço em disco, e armazena ficheiros de dados no seu disco local, S3, OSS, GCP ou Minio.

Do Elasticsearch para o Milvus 2.x

Na migração de dados do Elasticsearch, a recuperação de dados é diferente. Os dados não são obtidos a partir de ficheiros, mas sim sequencialmente, utilizando a API de deslocamento do Elasticsearch. Os dados são depois analisados e transformados no formato de armazenamento Milvus 2.x, seguindo-se a sua escrita utilizando bulkInsert. Para além da migração de vectores do tipo dense_vector armazenados no Elasticsearch, o Milvus Migration também suporta a migração de outros tipos de campo, incluindo long, integer, short, boolean, keyword, text e double.

Conjunto de funcionalidades do Milvus Migration

O Milvus Migration simplifica o processo de migração através do seu conjunto robusto de funcionalidades:

  • Fontes de dados suportadas:

    • Milvus 1.x para Milvus 2.x

    • Elasticsearch 7.0 e posteriores para Milvus 2.x

    • FAISS para Milvus 2.x

  • Múltiplos modos de interação:

    • Interface de linha de comando (CLI) utilizando a estrutura Cobra

    • API restful com uma IU Swagger incorporada

    • Integração como um módulo Go noutras ferramentas

  • Suporte versátil a formatos de ficheiros:

    • Ficheiros locais

    • Amazon S3

    • Serviço de armazenamento de objectos (OSS)

    • Plataforma de nuvem do Google (GCP)

  • Integração flexível com o Elasticsearch:

    • Migração de dense_vector vectores de tipo do Elasticsearch

    • Suporte para migração de outros tipos de campo, como longo, inteiro, curto, booleano, palavra-chave, texto e duplo

Definições de interface

O Milvus Migration fornece as seguintes interfaces principais:

  • /start: Inicia um trabalho de migração (equivalente a uma combinação de despejo e carregamento, atualmente só suporta migração ES).

  • /dump: Inicia um trabalho de dump (grava dados de origem no meio de armazenamento de destino).

  • /load: Inicia um trabalho de carregamento (escreve dados do meio de armazenamento de destino no Milvus 2.x).

  • /get_job: Permite que os utilizadores vejam os resultados da execução da tarefa. (Para mais detalhes, consulte o server.go do projeto)

Em seguida, vamos utilizar alguns dados de exemplo para explorar a forma de utilizar a Migração Milvus nesta secção. Você pode encontrar esses exemplos aqui no GitHub.

Migração do Elasticsearch para o Milvus 2.x

  1. Preparar dados do Elasticsearch

Para migrar os dados do Elasticsearch, já deve ter configurado o seu próprio servidor Elasticsearch. Deve armazenar os dados vectoriais no campo dense_vector e indexá-los com outros campos. Os mapeamentos de índice são os mostrados abaixo.

  1. Compilar e construir

Primeiro, baixe o código-fonte da Migração Milvus do GitHub. Em seguida, execute os seguintes comandos para compilá-lo.

go get
go build

Esta etapa gerará um arquivo executável chamado milvus-migration.

  1. Configurar migration.yaml

Antes de iniciar a migração, você deve preparar um arquivo de configuração chamado migration.yaml que inclui informações sobre a fonte de dados, o destino e outras configurações relevantes. Aqui está um exemplo de configuração:

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

Para obter uma explicação mais detalhada do arquivo de configuração, consulte esta página no GitHub.

  1. Executar o trabalho de migração

Agora que você configurou seu arquivo migration.yaml, você pode iniciar a tarefa de migração executando o seguinte comando:

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

Observe a saída do log. Quando você vir logs semelhantes aos seguintes, isso significa que a migração foi bem-sucedida.

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

Para além da abordagem de linha de comandos, o Milvus Migration também suporta a migração através da API Restful.

Para utilizar a API Restful, inicie o servidor da API utilizando o seguinte comando:

./milvus-migration server run -p 8080

Assim que o serviço for executado, pode iniciar a migração chamando a API.

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

Quando a migração estiver concluída, pode utilizar o Attu, uma ferramenta de administração de bases de dados vectoriais tudo-em-um, para ver o número total de linhas migradas com êxito e efetuar outras operações relacionadas com a coleção.

The Attu interface A interface do Attu

Migração do Milvus 1.x para o Milvus 2.x

  1. Preparar os dados do Milvus 1.x

Para o ajudar a experimentar rapidamente o processo de migração, colocámos 10.000 registos de dados de teste do Milvus 1.x no código fonte do Milvus Migration. No entanto, em casos reais, deve exportar o seu próprio ficheiro meta.json da sua instância Milvus 1.x antes de iniciar o processo de migração.

  • Pode exportar os dados com o seguinte comando.
./milvus-migration export -m "user:password@tcp(adderss)/milvus?charset=utf8mb4&parseTime=True&loc=Local" -o outputDir

Certifique-se de que:

  • Substituir os marcadores de posição pelas suas credenciais MySQL reais.

  • Parar o servidor Milvus 1.x ou interromper a escrita de dados antes de efetuar esta exportação.

  • Copie a pasta Milvus tables e o ficheiro meta.json para o mesmo diretório.

Nota: Se utilizar o Milvus 2.x no Zilliz Cloud (o serviço totalmente gerido do Milvus), pode iniciar a migração utilizando a Cloud Console.

  1. Compilar e construir

Primeiro, descarregue o código fonte do Milvus Migration a partir do GitHub. Depois, execute os seguintes comandos para o compilar.

go get
go build

Esta etapa gerará um arquivo executável chamado milvus-migration.

  1. Configurar migration.yaml

Prepare um ficheiro de configuração migration.yaml, especificando detalhes sobre a origem, o destino e outras definições relevantes. Aqui está um exemplo de configuração:

# 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

Para uma explicação mais detalhada do arquivo de configuração, consulte esta página no GitHub.

  1. Executar tarefa de migração

Você deve executar os comandos dump e load separadamente para concluir a migração. Estes comandos convertem os dados e importam-nos para o Milvus 2.x.

Nota: Em breve, simplificaremos este passo e permitiremos que os utilizadores concluam a migração utilizando apenas um comando. Fique atento.

Comando Dump:

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

Comando Load:

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

Após a migração, a coleção gerada no Milvus 2.x conterá dois campos: id e data. Pode ver mais detalhes utilizando o Attu, uma ferramenta de administração de bases de dados vectoriais tudo-em-um.

Migração do FAISS para o Milvus 2.x

  1. Preparar os dados FAISS

Para migrar os dados do Elasticsearch, deve ter os seus próprios dados FAISS prontos. Para o ajudar a experimentar rapidamente o processo de migração, colocámos alguns dados de teste FAISS no código-fonte do Milvus Migration.

  1. Compilar e construir

Primeiro, descarregue o código-fonte do Milvus Migration a partir do GitHub. Depois, execute os seguintes comandos para o compilar.

go get
go build

Este passo irá gerar um ficheiro executável com o nome milvus-migration.

  1. Configurar migration.yaml

Prepare um ficheiro de configuração migration.yaml para a migração FAISS, especificando detalhes sobre a origem, o destino e outras definições relevantes. Aqui está um exemplo de configuração:

# 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

Para uma explicação mais detalhada do ficheiro de configuração, consulte esta página no GitHub.

  1. Executar tarefa de migração

Tal como a migração do Milvus 1.x para o Milvus 2.x, a migração FAISS requer a execução dos comandos dump e load. Estes comandos convertem os dados e importam-nos para o Milvus 2.x.

Nota: Em breve, simplificaremos este passo e permitiremos que os utilizadores concluam a migração utilizando apenas um comando. Fique atento.

Comando Dump:

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

Comando Load:

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

Pode ver mais detalhes utilizando o Attu, uma ferramenta de administração de bases de dados vectoriais tudo-em-um.

Fique atento aos futuros planos de migração

No futuro, daremos suporte à migração de mais fontes de dados e adicionaremos mais recursos de migração, incluindo:

  • Suporte à migração de Redis para Milvus.

  • Suporte à migração do MongoDB para o Milvus.

  • Suporte à migração reescalonável.

  • Simplificar os comandos de migração, fundindo os processos de despejo e carregamento num só.

  • Suporte à migração de outras fontes de dados convencionais para o Milvus.

Conclusão

Milvus 2.3, a última versão do Milvus, traz novos recursos e melhorias de desempenho que atendem às crescentes necessidades de gerenciamento de dados. A migração dos seus dados para o Milvus 2.x pode trazer estes benefícios, e o projeto Milvus Migration torna o processo de migração simplificado e fácil. Experimente-o e não ficará desiludido.

Nota: As informações neste blogue baseiam-se no estado dos projectos Milvus e Milvus Migration em setembro de 2023. Consulte a documentação oficial do Milvus para obter as informações e instruções mais atualizadas.

Like the article? Spread the word

Continue Lendo