🚀 免費嘗試 Zilliz Cloud,完全托管的 Milvus,體驗速度提升 10 倍!立即嘗試

milvus-logo
LFAI

HomeBlogs介紹 Milvus 資料遷移工具

介紹 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 Data Migration) 是一個開放原始碼工具,專門設計用於使用 Milvus 匯入和匯出資料檔案。MilvusDM 可以透過以下方式大幅提升資料管理效率並降低 DevOps 成本:

milvusdm blog 1.png MilvusDM 博客 1.png

MilvusDM 寄存在Github上,執行命令列pip3 install pymilvusdm 即可輕鬆安裝。MilvusDM 允許您遷移特定集合或分割區中的資料。在下面的章節中,我們將解釋如何使用每種資料遷移類型。


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:

    • 跳過:如果資料集或分割區已存在,則忽略資料。

    • 追加:如果資料集或分割區已存在,則附加資料。

    • 覆寫:如果資料集或分割區已存在,則在插入前刪除資料。

  • dest_collection_name:接收匯入資料的集合名稱。

  • dest_partition_name:資料匯入的接收分割區名稱。

  • collection_parameter:特定於集合的資訊,例如向量尺寸、索引檔案大小和距離公制。

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:

    • 跳過:如果資料集或分割區已存在,則忽略資料。

    • 追加:如果資料集或分割區已存在,則附加資料。

    • 覆寫:如果資料集或分割區已存在,則在插入前刪除資料。

  • dest_collection_name:接收匯入資料的集合名稱。

  • dest_partition_name:資料匯入的接收分割區名稱。

  • collection_parameter:特定於集合的資訊,例如向量尺寸、索引檔案大小和距離公制。

設定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:Source Milvus MySQL 設定。如果不使用 MySQL,請將 mysql_parameter 設為 ''.

  • source_collection:源 Milvus 中集合及其分區的名稱。

  • dest_host:Milvus 伺服器位址。

  • dest_port:Milvus 伺服器連接埠。

  • mode:可使用下列模式將資料匯入 Milvus:

    • 跳過:如果資料集或分割區已存在,則忽略資料。

    • 追加:如果資料集或分割區已存在,則附加資料。

    • 覆寫:如果資料集或磁碟分割已經存在,請在插入前刪除資料。

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.根據指定的 collection 或 partition 的 metadata,讀取本機磁碟上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:Source Milvus MySQL 設定。如果不使用 MySQL,請將 mysql_parameter 設為 ''.

  • source_collection:源 Milvus 中集合及其分區的名稱。

  • 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.根據指定的集合或分割區的 metadata,讀取本機磁碟上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 blog 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 的 metadata。

      • data_too_milvus.py:根據 YAML 檔案中的參數建立集合或分割,並將向量和對應的向量 ID 匯入 Milvus。

      • save_data.py:將資料儲存為 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 Package Index)。


重溫

MilvusDM 主要處理將資料遷入或遷出 Milvus,包括將 Faiss 遷入 Milvus、將 HDF5 遷入 Milvus、將 Milvus 遷入 Milvus,以及將 Milvus 遷入 HDF5。

計畫在即將發佈的版本中提供下列功能:

  • 從 Faiss 匯入二進位資料至 Milvus。

  • 在來源 Milvus 和目標 Milvus 之間進行資料遷移的 Blocklist 和 allowlist。

  • 從源 Milvus 的多個資料庫或分區合併和匯入資料到目標 Milvus 的新資料庫。

  • 備份和復原 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

    繼續閱讀