介紹 Milvus 資料遷移工具
重要提示: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 成本:
Faiss 至 Milvus:從 Faiss 匯入未壓縮的資料至 Milvus。
HDF5 to Milvus:將 HDF5 檔案匯入 Milvus。
Milvus 到 Milvus:從源 Milvus 遷移資料到不同的目標 Milvus。
Milvus to HDF5: 將 Milvus 中的資料儲存為 HDF5 檔案。
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_path
或data_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 檔案結構:
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 StartedLike the article? Spread the word