🚀 Zilliz Cloudを無料で試す、完全管理型のMilvus—10倍の高速パフォーマンスを体験しよう!今すぐ試す>>

milvus-logo
LFAI
  • Home
  • Blog
  • Milvusデータ移行ツールのご紹介

Milvusデータ移行ツールのご紹介

  • Engineering
March 15, 2021
Zilliz

重要: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コストの削減が可能となります:

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_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 blog 2.png 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.pypymilvusdmファイルのパッケージを作成し、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 Started

    Like the article? Spread the word

    続けて読む