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 数据迁移)是一款开源工具,专门用于使用 Milvus 导入和导出数据文件。MilvusDM 可通过以下方式大大提高数据管理效率并降低 DevOps 成本:
从Faiss 到 Milvus:将未压缩的数据从 Faiss 导入 Milvus。
HDF5 到 Milvus:将 HDF5 文件导入 Milvus。
Milvus 到 Milvus:从源 Milvus 迁移数据到不同的目标 Milvus。
Milvus 至 HDF5:将 Milvus 中的数据保存为 HDF5 文件。
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_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
:源 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 博客 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 数据。
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word