Milvus 數據遷移工具 -- Milvusdm

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 文件
$ 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
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. 運行
$ milvusdm --yaml F2M.yaml

▶️體實現

讀取 Faiss 的文件,返回特徵向量和對應的 ids 並導入 Milvus。
   
   
   
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 文件
$ 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 參數指定文件目錄。兩個參數只能配置一個。
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. 運行
$ milvusdm --yaml H2M.yaml

▶️體實現

讀取 HDF5 格式的文件,返回特徵向量和對應的 ids 並導入 Milvus。
   
   
   
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 文件
$ 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 參數則爲空。
  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. 運行
$ milvusdm --yaml M2M.yaml

▶️體實現

讀取指定集合或分區的 meta 信息,根據 meta 信息讀取本地 milvus/db 下的數據文件,返回特徵向量和對應的 ids 並導入 Milvus。
   
   
   
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 文件
$ 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 路徑下。
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. 運行
$ milvusdm --yaml M2H.yaml

▶️體實現

讀取指定集合或分區的 meta 信息,根據 meta 信息讀取本地 milvus/db 下的數據文件,返回特徵向量和對應的 ids 並存入本地的 HDF5 文件中。
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

本文分享自微信公衆號 - ZILLIZ(Zilliztech)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章