🚀 免费试用 Zilliz Cloud,完全托管的 Milvus,体验 10 倍的性能提升!立即试用>

milvus-logo
LFAI

Milvus 数据迁移工具介绍

  • Engineering
March 15, 2021
Zilliz

重要提示:Mivus 数据迁移工具已被弃用。从其他数据库向 Milvus 迁移数据时,我们建议您使用更先进的 Milvus 迁移工具。

Milvus-migration 工具目前支持:

  • Elasticsearch 到 Milvus 2.x
  • Faiss 到 Milvus 2.x
  • Milvus 1.x 到 Milvus 2.x
  • Milvus 2.3.x 到 Milvus 2.3.x 或更高版本

我们将支持从 Pinecone、Chroma 和 Qdrant 等更多向量数据源迁移。敬请期待。

更多信息,请参阅Milvus-migration 文档或其GitHub 存储库

---------------------------------Mivus 数据迁移工具已被弃用----------------------

概述

MilvusDM(Milvus 数据迁移)是一款开源工具,专门用于使用 Milvus 导入和导出数据文件。MilvusDM 可通过以下方式大大提高数据管理效率并降低 DevOps 成本:

milvusdm blog 1.png MilvusDM 博客 1.png

MilvusDM 托管在Github上,可以通过运行命令行pip3 install pymilvusdm 轻松安装。MilvusDM 允许你迁移特定 Collections 或分区中的数据。在下面的章节中,我们将介绍如何使用每种数据迁移类型。


从 Faiss 迁移到 Milvus

步骤

1.下载F2M.yaml

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

2.设置以下参数

  • data_path:Faiss 中的数据路径(向量及其相应 ID)。

  • dest_host:Milvus 服务器地址。

  • dest_port:Milvus 服务器端口。

  • mode:可使用以下模式将数据导入 Milvus:

    • 跳过:如果 Collections 或分区已经存在,则忽略数据。

    • 追加:如果 Collection 或分区已经存在,则添加数据。

    • 覆盖:如果 Collection 或分区已经存在,则在插入前删除数据。

  • dest_collection_name:用于导入数据的接收 Collections 名称。

  • dest_partition_name:接收数据导入的分区名称。

  • collection_parameter:特定于 Collections 的信息,如向量维度、索引文件大小和距离度量。

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.运行F2M.yaml:

$ milvusdm --yaml F2M.yaml

示例代码

1.读取 Faiss 文件以检索向量及其相应的 ID。

ids, vectors = faiss_data.read_faiss_data()

2.将检索到的数据插入 Milvus:

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


从 HDF5 到 Milvus

步骤

1.下载H2M.yaml

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

2.设置以下参数

  • data_path:HDF5 文件路径

  • data_dir:保存 HDF5 文件的目录。

  • dest_host:Milvus 服务器地址。

  • dest_port:Milvus 服务器端口。

  • mode:可使用以下模式将数据导入 Milvus:

    • 跳过:如果 Collections 或分区已经存在,则忽略数据。

    • 追加:如果 Collection 或分区已经存在,则添加数据。

    • 覆盖:如果 Collection 或分区已经存在,则在插入前删除数据。

  • dest_collection_name:用于导入数据的接收 Collections 名称。

  • dest_partition_name:接收数据导入的分区名称。

  • collection_parameter:特定于 Collections 的信息,如向量维度、索引文件大小和距离度量。

设置data_pathdata_dir不要同时设置。使用data_path 指定多个文件路径,或使用data_dir 指定存放数据文件的目录。

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.运行H2M.yaml:

$ milvusdm --yaml H2M.yaml

示例代码

1.读取 HDF5 文件,检索向量及其对应的 ID:

vectors, ids = self.file.read_hdf5_data()

2.将检索到的数据插入 Milvus:

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


Milvus 到 Milvus

步骤

1.下载M2M.yaml

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

2.设置以下参数

  • source_milvus_path:源 Milvus 工作路径。

  • mysql_parameter:源 Milvus MySQL 设置。如果不使用 MySQL,请将 mysql_parameter 设置为""。

  • source_collection:源 Milvus 中的 Collections 及其分区名称。

  • dest_host:Milvus 服务器地址。

  • dest_port:Milvus 服务器端口。

  • mode:可使用以下模式将数据导入 Milvus:

    • 跳过:如果 Collections 或分区已经存在,则忽略数据。

    • 追加:如果 Collection 或分区已经存在,则添加数据。

    • 覆盖:如果 Collection 或分区已经存在,则在插入数据前删除数据。如果 Collection 或分区已经存在,则在插入数据前删除数据。

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.运行M2M.yaml。

$ milvusdm --yaml M2M.yaml

示例代码

1.根据指定的 Collections 或分区的元数据,读取本地硬盘上milvus/db下的文件,从源 Milvus 获取向量及其对应的 ID。

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.将检索到的数据插入目标 Milvus。

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


将 Milvus 转换为 HDF5

步骤

1.下载M2H.yaml

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

2.设置以下参数

  • source_milvus_path:源 Milvus 工作路径。

  • mysql_parameter:源 Milvus MySQL 设置。如果不使用 MySQL,请将 mysql_parameter 设置为""。

  • source_collection:源 Milvus 中的 Collections 及其分区名称。

  • data_dir:保存 HDF5 文件的目录。

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.运行M2H.yaml

$ milvusdm --yaml M2H.yaml

示例代码

1.根据指定的 Collections 或分区的元数据,读取本地硬盘上milvus/db下的文件,检索向量及其相应的 ID。

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.将检索到的数据保存为 HDF5 文件。

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

MilvusDM 文件结构

下面的流程图显示了 MilvusDM 如何根据接收到的 YAML 文件执行不同的任务:

milvusdm blog 2.png MilvusDM 博客 2.png

MilvusDM 文件结构:

  • pymilvusdm

    • 核心

      • milvus_client.py:在 Milvus 中执行客户端操作。

      • read_data.py:读取本地硬盘上的 HDF5 数据文件。(在此添加你的代码,以支持读取其他格式的数据文件)。

      • read_faiss_data.py:读取 Faiss 中的数据文件。

      • read_milvus_data.py:读取 Milvus 格式的数据文件。

      • read_milvus_meta.py:读取 Milvus 中的元数据。

      • data_too_milvus.py:根据 YAML 文件中的参数创建 Collections 或分区,并将向量和相应的向量 ID 导入 Milvus。

      • save_data.py:将数据保存为 HDF5格式:将数据保存为 HDF5 文件。

      • write_logs.py:在运行时写入日志。

    • faiss_to_milvus.py:将数据从 Faiss 导入 Milvus。

    • hdf5_to_milvus.py:将 HDF5 文件中的数据导入 Milvus。

    • milvus_to_milvus.py:将源 Milvus 中的数据迁移到目标 Milvus 中。

    • milvus_to_hdf5.py:导出 Milvus 中的数据并将其保存为 HDF5 文件。

    • main.py:根据接收到的 YAML 文件执行相应任务。

    • setting.py:与运行 MilvusDM 代码相关的配置。

  • setup.py:创建pymilvusdm文件包并将其上传到 PyPI(Python 软件包索引)。


回顾

MilvusDM 主要处理数据在 Milvus 中的迁移,包括从 Faiss 迁移到 Milvus、从 HDF5 迁移到 Milvus、从 Milvus 迁移到 Milvus 以及从 Milvus 迁移到 HDF5。

即将发布的版本计划提供以下功能:

  • 将二进制数据从 Faiss 导入 Milvus。

  • 在源 Milvus 和目标 Milvus 之间迁移数据的 Blocklist 和 allowlist。

  • 将源 Milvus 中多个 Collections 或分区的数据合并并导入目标 Milvus 中的新 Collections。

  • 备份和恢复 Milvus 数据。

MilvusDM 项目在Github 上开源。欢迎为该项目做出任何贡献。给它一颗星🌟,并随时提交问题或自己的代码!

    Try Managed Milvus for Free

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

    Get Started

    Like the article? Spread the word

    扩展阅读