前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Milvus 数据迁移工具 -- Milvusdm

Milvus 数据迁移工具 -- Milvusdm

作者头像
Zilliz RDS
发布2021-03-22 11:52:52
3.4K0
发布2021-03-22 11:52:52
举报
文章被收录于专栏:Reinvent Data Science

Milvusdm (Milvus Data Migration) 是一款针对 Milvus 研发的数据迁移工具,支持 Milvus 数据传输以及数据文件的导入与导出:

  • Faiss to Milvus:将未压缩的 Faiss 文件导入 Milvus
  • HDF5 to Milvus:将 HDF5 格式的文件导入 Milvus
  • Milvus to Milvus:支持 Milvus 之间的数据迁移
  • Milvus to HDF5:将 Milvus 数据批量备份为 HDF5 格式的本地文件

开发者使用 milvusdm 可以提升数据管理效率,降低运维成本。

功能介绍

在之前发布的文章 Milvus 迁移升级攻略中,我们介绍了如何将 Milvus 数据从有网环境迁移到无网环境以及不同版本 Milvus 之间的数据迁移。数据迁移工具 milvusdm 可以通过指定 Milvus 中的集合或分区,帮助用户更智能地迁移所需数据。Milvusdm 十分易于使用,只需要运行一句 pip3 install pymilvusdm 指令即可快速安装。此外,您还可在 github 上获取本项目的开源代码。本文将介绍 milvusdm 工具的使用方法:

Faiss to Milvus

?使用示例

1. 下载 yaml 文件

代码语言:javascript
复制
$ wget https://raw.githubusercontent.com/milvus-io/milvus-tools/main/yamls/F2M.yaml

2. 配置参数

通过指定文件路径 data_path 读取 Faiss 的数据,并将读取到的向量和 ids 导入 Milvus 中。导入时需要指定参数 dest_host、dest_port、mode、

dest_collection_name、dest_partition_name 和 collection_parameter。

代码语言:javascript
复制
F2M:  
  milvus_version: 0.10.5  
  data_path: '/home/data/faiss.index'  
  dest_host: '127.0.0.1'  
  dest_port: 19530  
  mode: 'append'  
  dest_collection_name: 'test'  
  dest_partition_name: ''  
  collection_parameter:    
  dimension: 256    
  index_file_size: 1024    
  metric_type: 'L2'

3. 运行

代码语言:javascript
复制
$ milvusdm --yaml F2M.yaml

▶️具体实现

读取 Faiss 的文件,返回特征向量和对应的 ids 并导入 Milvus。

代码语言:javascript
复制
ids, vectors = faiss_data.read_faiss_data()
insert_milvus.insert_data(vectors, self.dest_collection_name, self.collection_parameter, self.mode, ids, self.dest_partition_name)

HDF5 to Milvus

?使用示例

1. 下载 yaml 文件

代码语言:javascript
复制
$ wget https://raw.githubusercontent.com/milvus-io/milvus-tools/main/yamls/H2M.yaml

2. 配置参数

通过指定 data_path 或 data_dir 读取 HDF5 格式的数据并导入 Milvus 中。导入时需要指定参数 dest_host、dest_port、mode、dest_collection_name、dest_partition_name 和 collection_parameter。

data_path 参数可指定多个文件路径,data_dir 参数指定文件目录。两个参数只能配置一个。

代码语言:javascript
复制
H2M:  
  milvus-version: 0.10.5  
  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. 运行

代码语言:javascript
复制
$ milvusdm --yaml H2M.yaml

▶️具体实现

读取 HDF5 格式的文件,返回特征向量和对应的 ids 并导入 Milvus。

代码语言:javascript
复制
embeddings, ids = self.file.read_hdf5_data()
ids = insert_milvus.insert_data(embeddings, self.c_name, self.c_param, self.mode, ids,self.p_name)

Milvus to Milvus

?使用示例

1. 下载 yaml 文件

代码语言:javascript
复制
$ wget https://raw.githubusercontent.com/milvus-io/milvus-tools/main/yamls/M2M.yaml

2. 配置参数

通过指定 source_milvus_path、mysql_parameter和 source_collection读取源 Milvus 的向量和 ids 数据并导入 Milvus 中。导入时需要指定参数 dest_host、dest_port 和 mode。

如果源 Milvus 没有使用 MySQL 进行元数据管理, mysql_parameter 参数则为空。

代码语言:javascript
复制
  M2M:
    milvus_version: 0.10.5  
    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. 运行

代码语言:javascript
复制
$ milvusdm --yaml M2M.yaml

▶️具体实现

读取指定集合或分区的 meta 信息,根据 meta 信息读取本地 milvus/db 下的数据文件,返回特征向量和对应的 ids 并导入 Milvus。

代码语言:javascript
复制
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)
milvus_insert.insert_data(r_vectors, collection_name, collection_parameter, self.mode, r_ids, partition_tag)

Milvus to HDF5

?使用示例

1. 下载 yaml 文件

代码语言:javascript
复制
$ wget https://raw.githubusercontent.com/milvus-io/milvus-tools/main/yamls/M2H.yaml

2. 修改参数

通过指定 source_milvus_path、mysql_parameter 和 source_collection 读取源 Milvus 的数据,将 HDF5 格式的向量和 ids 保存在 data_dir 路径下。

代码语言:javascript
复制
M2H:  
  milvus_version: 0.10.5  
  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. 运行

代码语言:javascript
复制
$ milvusdm --yaml M2H.yaml

▶️具体实现

读取指定集合或分区的 meta 信息,根据 meta 信息读取本地 milvus/db 下的数据文件,返回特征向量和对应的 ids 并存入本地的 HDF5 文件中。

代码语言:javascript
复制
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)
data_save.save_yaml(collection_name, partition_tag, collection_parameter, version, save_hdf5_name)

Milvusdm 代码结构

我们十分欢迎大家为开源项目 milvusdm 贡献代码。你可以通过代码文件结构了解 milvusdm 工具的设计构思。如有新的数据迁移需求,你还可以通过修改源码,为社区贡献代码。

使用 milvusdm 时会根据传入的 yaml 文件执行对应的任务,如下图所示:

  • pymilvusdm
    • Core
      • ‍milvus_client.py,Milvus 客户端相关的操作
      • read_data.py,读取本地 HDF5 格式的数据文件(如果有读取其他文件格式的需求,可在此处添加代码)
      • read_faiss_data.py,读取 Faiss 的数据文件
      • read_milvus_data.py,读取 Milvus 的数据文件
      • read_milvus_meta.py,读取 Milvus 的 meta 信息
      • data_to_milvus.py,根据 yaml 文件配置参数,建立集合或分区,并将向量和 ids 导入 Milvus
      • save_data.py,将读取到的数据保存为 HDF5 格式的文件
      • write_logs.py,在执行操作时写 debug/info/error 日志
    • 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,执行代码时的相关配置参数
  • setup.py,将 pymilvusdm 打包并上传到 pypi

本文介绍了 milvusdm 工具的使用方法和开源代码。Milvusdm 主要支持以下四个功能:Faiss to Milvus、HDF5 to Milvus、Milvus to Milvus、Milvus to HDF5。如果有任何问题和建议,欢迎给本项目提 issue 或贡献代码。我们计划在下个版本中添加以下功能:

  • 支持将 Faiss 的 binary 数据文件导入 Milvus
  • Milvus to Milvus 时支持指定黑白名单
  • Milvus to Milvus 时支持将多个集合或分区的数据合并导入至一个集合中
  • 支持 Milvus 数据备份和数据恢复

欢迎加入 Milvus 社区

github.com/milvus-io/milvus | 源码

milvus.io | 官网

milvusio.slack.com | Slack 社区

zhihu.com/org/zilliz-11| 知乎

zilliz.blog.csdn.net | CSDN 博客

space.bilibili.com/478166626 | Bilibili

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ZILLIZ 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 功能介绍
  • ?使用示例
  • ▶️具体实现
  • ▶️具体实现
  • ▶️具体实现
  • ▶️具体实现
  • Milvusdm 代码结构
  • 欢迎加入 Milvus 社区
相关产品与服务
迁移服务平台
迁移服务平台(Migration Service Platform,MSP)是帮助客户将系统从源平台迁移到腾讯云的工具。为迁移上云项目提供源端资源调研、上云规划、目标资源创建、批量迁移实施等能力,帮助降低客户迁移上云的复杂度,提升迁移效率。迁移服务平台 MSP 不收取任何额外费用,您只需为购买的资源及 DTS 数据迁移工具付费。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档