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

milvus-logo
LFAI
  • Home
  • Blog
  • Apresentação da ferramenta de migração de dados Milvus

Apresentação da ferramenta de migração de dados Milvus

  • Engineering
March 15, 2021
Zilliz

Nota importante: A ferramenta de migração de dados do Mivus foi descontinuada. Para a migração de dados de outras bases de dados para Milvus, recomendamos que utilize a ferramenta de migração Milvus, mais avançada.

Atualmente, a ferramenta de migração Milvus é compatível:

  • Elasticsearch para Milvus 2.x
  • Faiss para Milvus 2.x
  • Milvus 1.x para Milvus 2.x
  • Milvus 2.3.x para Milvus 2.3.x ou superior

Iremos suportar a migração de mais fontes de dados vectoriais, tais como Pinecone, Chroma e Qdrant. Fique atento.

Para mais informações, consulte a documentação do Milvus-migration ou o seu repositório GitHub.

--------------------------------- A ferramenta de migração de dados do Mivus foi descontinuada ----------------------

Visão geral

O MilvusDM (Milvus Data Migration) é uma ferramenta de código aberto concebida especificamente para importar e exportar ficheiros de dados com o Milvus. O MilvusDM pode melhorar significativamente a eficiência da gestão de dados e reduzir os custos de DevOps das seguintes formas:

milvusdm blog 1.png blogue do milvusdm 1.png

O MilvusDM está hospedado no Github e pode ser facilmente instalado executando a linha de comando pip3 install pymilvusdm. O MilvusDM permite-lhe migrar dados numa coleção ou partição específica. Nas secções seguintes, explicaremos como utilizar cada tipo de migração de dados.


Faiss para Milvus

Etapas

1 - Descarregar o ficheiro F2M.yaml:

$ wget https://raw.githubusercontent.com/milvus-io/milvus-tools/main/yamls/F2

2.Defina os seguintes parâmetros:

  • data_path: Caminho dos dados (vectores e seus IDs correspondentes) em Faiss.

  • dest_host: Endereço do servidor Milvus.

  • dest_port: Porta do servidor Milvus.

  • mode: Os dados podem ser importados para o Milvus usando os seguintes modos:

    • Skip: Ignorar dados se a coleção ou partição já existir.

    • Anexar: Anexar dados se a coleção ou partição já existir.

    • Sobrescrever: Eliminar os dados antes da inserção se a coleção ou partição já existir.

  • dest_collection_name: Nome da coleção recetora para importação de dados.

  • dest_partition_name: Nome da partição recetora para a importação de dados.

  • collection_parameter: Informações específicas da coleção, tais como dimensão do vetor, tamanho do ficheiro de índice e métrica de distância.

F2M:
  milvus_version: 1.0.0
  data_path: '/home/data/faiss.index'
  dest_host: '127.0.0.1'
  dest_port: 19530
  mode: 'append'        # 'skip/append/overwrite'
  dest_collection_name: 'test'
  dest_partition_name: ''
  collection_parameter:
    dimension: 256
    index_file_size: 1024
    metric_type: 'L2'

3.Executar F2M.yaml:

$ milvusdm --yaml F2M.yaml

Código de amostra

1 - Ler os ficheiros Faiss para obter os vectores e os respectivos IDs.

ids, vectors = faiss_data.read_faiss_data()

2 - Inserir os dados recuperados no Milvus:

insert_milvus.insert_data(vectors, self.dest_collection_name, self.collection_parameter, self.mode, ids, self.dest_partition_name)


HDF5 para Milvus

Passos

1 - Descarregar o ficheiro H2M.yaml.

$ wget https://raw.githubusercontent.com/milvus-io/milvus-tools/main/yamls/H2M.yaml

2. definir os seguintes parâmetros:

  • data_path: Caminho para os ficheiros HDF5.

  • data_dir: Diretório que contém os ficheiros HDF5.

  • dest_host: Endereço do servidor Milvus.

  • dest_port: Porta do servidor Milvus.

  • mode: Os dados podem ser importados para o Milvus usando os seguintes modos:

    • Skip: Ignorar dados se a coleção ou partição já existir.

    • Anexar: Anexar dados se a coleção ou partição já existir.

    • Sobrescrever: Eliminar os dados antes da inserção se a coleção ou partição já existir.

  • dest_collection_name: Nome da coleção recetora para importação de dados.

  • dest_partition_name: Nome da partição recetora para a importação de dados.

  • collection_parameter: Informações específicas da coleção, tais como dimensão do vetor, tamanho do ficheiro de índice e métrica de distância.

Defina data_path ou data_dir. Não defina ambos. Utilize data_path para especificar vários caminhos de ficheiros, ou data_dir para especificar o diretório que contém o ficheiro de dados.

H2M:
  milvus-version: 1.0.0
  data_path:
    - /Users/zilliz/float_1.h5
    - /Users/zilliz/float_2.h5
  data_dir:
  dest_host: '127.0.0.1'
  dest_port: 19530
  mode: 'overwrite'        # 'skip/append/overwrite'
  dest_collection_name: 'test_float'
  dest_partition_name: 'partition_1'
  collection_parameter:
    dimension: 128
    index_file_size: 1024
    metric_type: 'L2'

3.Execute H2M.yaml:

$ milvusdm --yaml H2M.yaml

Código de amostra

1 - Leia os arquivos HDF5 para recuperar os vetores e seus IDs correspondentes:

vectors, ids = self.file.read_hdf5_data()

2 - Insira os dados recuperados no Milvus:

ids = insert_milvus.insert_data(vectors, self.c_name, self.c_param, self.mode, ids,self.p_name)


Milvus para Milvus

Passos

1.Descarregar o ficheiro M2M.yaml.

$ wget https://raw.githubusercontent.com/milvus-io/milvus-tools/main/yamls/M2M.yaml

2. definir os seguintes parâmetros:

  • source_milvus_path: Caminho de trabalho do Milvus de origem.

  • mysql_parameter: Configurações do MySQL do Milvus de origem. Se o MySQL não for utilizado, definir o parâmetro mysql_parameter como ''.

  • source_collection: Nomes da coleção e das suas partições no Milvus de origem.

  • dest_host: Endereço do servidor Milvus.

  • dest_port: Porta do servidor Milvus.

  • mode: Os dados podem ser importados para o Milvus usando os seguintes modos:

    • Skip: Ignorar dados se a coleção ou partição já existir.

    • Anexar: Anexar dados se a coleção ou partição já existir.

    • Sobrescrever: Se a coleção ou partição já existir, apagar os dados antes de os inserir.Apagar os dados antes de os inserir se a coleção ou partição já existir.

M2M:
  milvus_version: 1.0.0
  source_milvus_path: '/home/user/milvus'
  mysql_parameter:
    host: '127.0.0.1'
    user: 'root'
    port: 3306
    password: '123456'
    database: 'milvus'
  source_collection:
    test:
      - 'partition_1'
      - 'partition_2'
  dest_host: '127.0.0.1'
  dest_port: 19530
  mode: 'skip' # 'skip/append/overwrite'

3. executar M2M.yaml.

$ milvusdm --yaml M2M.yaml

Código de exemplo

1 - De acordo com os metadados de uma coleção ou partição especificada, leia os ficheiros em milvus/db na sua unidade local para obter vectores e os seus IDs correspondentes a partir do Milvus de origem.

collection_parameter, _ = milvus_meta.get_collection_info(collection_name)
r_vectors, r_ids, r_rows = milvusdb.read_milvus_file(self.milvus_meta, collection_name, partition_tag)

2 - Insira os dados recuperados no Milvus de destino.

milvus_insert.insert_data(r_vectors, collection_name, collection_parameter, self.mode, r_ids, partition_tag)


Milvus para HDF5

Passos

1 - Descarregar o ficheiro M2H.yaml:

$ wget https://raw.githubusercontent.com/milvus-io/milvus-tools/main/yamls/M2H.yaml

2.Definir os seguintes parâmetros:

  • source_milvus_path: Caminho de trabalho do Milvus de origem.

  • mysql_parameter: Configurações do MySQL do Source Milvus. Se o MySQL não for utilizado, definir o parâmetro mysql_parameter como ''.

  • source_collection: Nomes da coleção e das suas partições no Milvus de origem.

  • data_dir: Diretório para guardar os ficheiros HDF5 guardados.

M2H:
  milvus_version: 1.0.0
  source_milvus_path: '/home/user/milvus'
  mysql_parameter:
    host: '127.0.0.1'
    user: 'root'
    port: 3306
    password: '123456'
    database: 'milvus'
  source_collection: # specify the 'partition_1' and 'partition_2' partitions of the 'test' collection.
    test:
      - 'partition_1'
      - 'partition_2'
  data_dir: '/home/user/data'

3.Executar M2H.yaml:

$ milvusdm --yaml M2H.yaml

Código de exemplo

1 - De acordo com os metadados de uma coleção ou partição especificada, leia os ficheiros em milvus/db na sua unidade local para obter vectores e os seus IDs correspondentes.

collection_parameter, version = milvus_meta.get_collection_info(collection_name)
r_vectors, r_ids, r_rows = milvusdb.read_milvus_file(self.milvus_meta, collection_name, partition_tag)

2) Guardar os dados obtidos como ficheiros HDF5.

data_save.save_yaml(collection_name, partition_tag, collection_parameter, version, save_hdf5_name)

Estrutura do ficheiro MilvusDM

O fluxograma abaixo mostra como o MilvusDM executa diferentes tarefas de acordo com o ficheiro YAML que recebe:

milvusdm blog 2.png milvusdm blog 2.png

Estrutura do ficheiro MilvusDM:

  • pymilvusdm

    • núcleo

      • milvus_client.py: Executa operações de cliente no Milvus.

      • read_data.py: Lê os ficheiros de dados HDF5 no seu disco local. (Adicione o seu código aqui para suportar a leitura de ficheiros de dados noutros formatos).

      • read_faiss_data.py: Lê os arquivos de dados em Faiss.

      • read_milvus_data.py: Lê os ficheiros de dados em Milvus.

      • read_milvus_meta.py: Lê os metadados em Milvus.

      • data_to_milvus.py: Cria colecções ou partições com base em parâmetros em ficheiros YAML e importa os vectores e os IDs dos vectores correspondentes para o Milvus.

      • save_data.py: Salva os dados como arquivos HDF5.

      • write_logs.py: Escreve os registos durante o tempo de execução.

    • faiss_to_milvus.py: Importa dados do Faiss para o Milvus.

    • hdf5_to_milvus.py: Importa dados em ficheiros HDF5 para o Milvus.

    • milvus_to_milvus.py: Migra dados de um Milvus de origem para o Milvus de destino.

    • milvus_to_hdf5.py: Exporta dados no Milvus e guarda-os como ficheiros HDF5.

    • main.py: Executa as tarefas correspondentes de acordo com o ficheiro YAML recebido.

    • setting.py: Configurações relacionadas com a execução do código MilvusDM.

  • setup.py: Cria pacotes de ficheiros pymilvusdm e carrega-os para o PyPI (Python Package Index).


Recapitulação

O MilvusDM lida principalmente com a migração de dados dentro e fora do Milvus, o que inclui Faiss para Milvus, HDF5 para Milvus, Milvus para Milvus e Milvus para HDF5.

As seguintes funcionalidades estão planeadas para as próximas versões:

  • Importação de dados binários do Faiss para o Milvus.

  • Lista de bloqueios e lista de permissões para migração de dados entre o Milvus de origem e o Milvus de destino.

  • Fundir e importar dados de várias colecções ou partições no Milvus de origem para uma nova coleção no Milvus de destino.

  • Backup e recuperação dos dados do Milvus.

O projeto MilvusDM é de código aberto no Github. Toda e qualquer contribuição para o projeto é bem-vinda. Dê-lhe uma estrela 🌟, e sinta-se à vontade para registar um problema ou submeter o seu próprio código!

    Try Managed Milvus for Free

    Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

    Get Started

    Like the article? Spread the word

    Continue Lendo