Milvusデータ移行ツールのご紹介
重要:Mivusデータ移行ツールは廃止されました。他のデータベースからMilvusへのデータ移行には、より高度なMilvus-migration Toolを使用することをお勧めします。
Milvusマイグレーションツールは現在以下の機能をサポートしています:
- Elasticsearch to Milvus 2.x
- Faiss to 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からMilvusへ: HDF5ファイルをMilvusにインポートします。
MilvusからMilvusへ: データをソースMilvusから異なるターゲットMilvusへ移行する。
Milvusから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
: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.指定されたコレクションまたはパーティションのメタデータに従って、ローカルドライブの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におけるコレクションとそのパーティションの名前。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.指定されたコレクションまたはパーティションのメタデータに従って、ローカルドライブ上の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_to_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からMilvus、HDF5からMilvus、MilvusからMilvus、MilvusからHDF5へのデータ移行を行う。
今後のリリースでは以下の機能が予定されています:
FaissからMilvusへのバイナリデータのインポート。
MilvusからMilvusへのバイナリデータのインポート。
ソースMilvusの複数のコレクションまたはパーティションからターゲットMilvusの新しいコレクションへのデータのマージとインポート。
Milvusデータのバックアップとリカバリ。
MilvusDMプロジェクトはGithub上でオープンソース化されています。プロジェクトへの貢献は大歓迎です。スターを付けてください🌟。そして、issueを提出したり、あなた自身のコードを投稿してください!
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word