46.6kデモを予約するログイン無料で始める

Milvusにデータをシームレスに移行する方法:包括的ガイド

Oct 02, 20233 min read

Milvusは、類似検索のための堅牢なオープンソースのベクトルデータベースであり、数十億から数兆のベクトルデータを最小のレイテンシーで保存、処理、検索することができます。また、非常にスケーラブルで信頼性が高く、クラウドネイティブで機能豊富です。Milvusの最新リリースでは、10倍以上の高速パフォーマンスを実現するGPUサポートや、1台のマシンでより大きなストレージ容量を実現するMMapなど、さらにエキサイティングな機能と改良が導入されています。

2023年9月現在、MilvusはGitHubで約23,000のスターを獲得しており、様々な業種から様々なニーズを持つ数万人のユーザーを抱えています。ChatGPT](https://zilliz.com/learn/ChatGPT-Vector-Database-Prompt-as-code)のようなGenerative AI技術が普及するにつれ、さらに人気が高まっている。特にretrieval augmented generationフレームワークは、大規模言語モデルの幻覚問題に対処するもので、様々なAIスタックに欠かせないコンポーネントとなっている。

Milvusへの移行を希望する新規ユーザーや、Milvusの最新バージョンへのアップグレードを希望する既存ユーザーからの需要の高まりに応えるため、私たちはMilvus Migrationを開発しました。本ブログでは、Milvus Migrationの機能をご紹介し、Milvus 1.x、FAISS、Elasticsearch 7.0以降からMilvusへの迅速なデータ移行についてご案内いたします。

Milvus Migration, 強力なデータ移行ツール

Milvus MigrationはGoで書かれたデータ移行ツールです。旧バージョンのMilvus (1.x)、FAISS、Elasticsearch 7.0以降からMilvus 2.xへのシームレスなデータ移行が可能です。

下図はMilvus Migrationの構築方法とその動作を示しています。

Milvusマイグレーションによるデータ移行方法

Milvus1.xおよびFAISSからMilvus2.xへ

Milvus 1.xおよびFAISSからのデータ移行では、元のデータファイルの内容を解析し、Milvus 2.xのデータ格納フォーマットに変換し、Milvus SDKのbulkInsertを使用してデータを書き込みます。このプロセス全体はストリームベースであり、理論的にはディスク容量のみに制限され、データファイルはローカルディスク、S3、OSS、GCP、またはMinioに保存されます。

Elasticsearch から Milvus 2.x へ

Elasticsearch からのデータ移行では、データの取得方法が異なります。データはファイルから取得されるのではなく、Elasticsearch の scroll API を使って順次取得されます。その後、データをパースして Milvus 2.x ストレージフォーマットに変換し、bulkInsert を使ってデータを書き込む。Elasticsearch に格納されている dense_vector 型のベクタのマイグレーションに加えて、Milvus Migration は long, integer, short, boolean, keyword, text, double などの他のフィールド型のマイグレーションもサポートしている。

Milvusマイグレーション機能セット

Milvus Migrationは、堅牢な機能セットにより移行プロセスを簡素化します:

  • サポートされるデータソース:

    • Milvus 1.x から Milvus 2.x への移行

    • Elasticsearch 7.0以降からMilvus 2.xまで

    • FAISSからMilvus 2.x

  • 複数の相互作用モード:

    • Cobraフレームワークを使用したコマンドラインインターフェイス(CLI)

    • Swagger UIを組み込んだRestful API

    • 他のツールにGoモジュールとして統合

  • 多彩なファイル形式をサポート:**。

    • ローカルファイル

    • アマゾンS3

    • オブジェクトストレージサービス(OSS)

    • グーグル・クラウド・プラットフォーム(GCP)

  • フレキシブルなElasticsearchとの統合

    • Elasticsearch からの dense_vector 型ベクトルの移行

    • long、integer、short、boolean、keyword、text、double などの他のフィールド型の移行をサポート

インターフェースの定義

Milvus Migration は以下の主要なインタフェースを提供します:

  • /start:/start:マイグレーションジョブを開始します(ダンプとロードの組み合わせに相当します。)

  • /dump`:ダンプジョブを開始する (移行元データを移行先のストレージメディアに書き込む)。

  • /load`:ロードジョブを開始する:ロードジョブを開始する(ターゲット記憶媒体から Milvus 2.x にデータを書き込む)。

  • /get_job: ジョブの実行結果を表示する:ジョブの実行結果を閲覧できるようにする。(詳細は プロジェクトの server.go を参照)

次に、このセクションでMilvus Migrationの使い方を探るために、いくつかのサンプルデータを使ってみましょう。これらの例はこちらのGitHubにあります。

Elasticsearch から Milvus 2.x へのマイグレーション

  1. Elasticsearchデータの準備

Elasticsearch](https://github.com/zilliztech/milvus-migration)のデータをマイグレーションするには、Elasticsearchサーバーをセットアップしておく必要があります。ベクトルデータを dense_vector フィールドに格納し、他のフィールドでインデックスを作成します。インデックスのマッピングは以下のようになります。

  1. コンパイルとビルド

まず、Milvus MigrationのGitHubからのソースコードをダウンロードします。そして、以下のコマンドを実行してコンパイルします。

go get
ビルドする

このステップで milvus-migration という名前の実行ファイルが生成される。

  1. migration.yaml`を設定する。

マイグレーションを開始する前に、データソース、ターゲット、その他の関連する設定の情報を含む migration.yaml という名前の設定ファイルを用意する必要があります。以下に設定例を示す:

# Elasticsearch から Milvus 2.x へのマイグレーション設定


dumper:
  worker:
    workMode:Elasticsearch
    リーダー
      バッファサイズ: 2500
meta:
  モード: config
  インデックス: test_index
  フィールド
    - 名前: id
      pk: true
      タイプ: long
    - 名前: other_field
      maxLen: 60
      タイプ: キーワード
    - 名前: data
      タイプ: dense_vector
      dims:512
  milvus:
      コレクション"rename_index_test"
      closeDynamicField: false
      一貫性レベル最終的に
      shardNum:1


ソース
  es:
    urls:
      - http://localhost:9200
    ユーザー名:xxx
    パスワード: xxx


ターゲット
  モード:リモート
  リモート
    outputDir: outputPath/migration/test1
    クラウド: aws
    リージョン: us-west-2
    バケット: xxx
    useIAM: true
    checkBucket: false
  milvus2x:
    エンドポイント: {yourMilvusAddress}:{port}
    ユーザー名******
    パスワード******

設定ファイルの詳細については、GitHubのこのページを参照してください。

  1. 移行ジョブの実行

これで migration.yaml ファイルの設定が完了したので、次のコマンドを実行してマイグレーションタスクを開始できます:

./milvus-migration start --config=/{YourConfigFilePath}/migration.yaml

ログ出力を観察する。以下のようなログが表示されたら、移行が成功したことを意味します。

[task/load_base_task.go:94] ["[LoadTasker] Dec Task Processing-------------->"] [Count=0] [fileName=testfiles/output/zwh/migration/test_base_task.go:94[Count=0] [fileName=testfiles/output/zwh/migration/test_mul_field4/data_1_1.json] [taskId=442665677354739304][task/load_base_task.go:76] ["[LoadTasker] Progress Task --------------->"][fileName=testfiles/output/zwh/migration/test_mul_field4/data_1_1.json][taskId=442665677354739304][dbclient/cus_field_milvus2x.go:86] ["[Milvus2x] begin to ShowCollectionRows"][loader/cus_milvus2x_loader.go:66] ["[Loader] Static: "].[collection=test_mul_field4_rename1][beforeCount=50000][afterCount=100000][increase=50000][loader/cus_milvus2x_loader.go:66] ["[Loader] Static Total"] ["Total Collections" =1["Total Collections"=1] [beforeTotalCount=50000] [afterTotalCount=100000] [totalIncrease=50000][migration/es_starter.go:25] ["[Starter]ESからMilvusへのマイグレーション終了!!!"][コスト=80.009174459][starter/starter.go:106] ["[スターター] マイグレーション成功!"][コスト=80.00928425][cleaner/remote_cleaner.go:27] ["[リモートクリーナー] ファイルのクリーニングを開始"]bucket=a-bucket] [rootPath=testfiles/output/zwh/migration][cmd/start.go:32] ["[Cleaner] clean file success!"] ["[リモートクリーナー] ファイルのクリーニングを開始します。

コマンドラインアプローチに加えて、Milvus MigrationはRestful APIを使ったマイグレーションもサポートしています。

Restful APIを利用するには、以下のコマンドでAPIサーバを起動します:

./milvus-migration server run -p 8080

サービスが実行されたら、APIを呼び出してマイグレーションを開始できる。

curl -XPOST http://localhost:8080/api/v1/start

移行が完了したら、オールインワンのベクトルデータベース管理ツールである Attu を使って、移行に成功した行の総数を表示したり、その他のコレクション関連の操作を行うことができます。

Attuインターフェイス](https://assets.zilliz.com/attu_interface_vector_database_admin_4893a31f6d.png)

Milvus 1.x から Milvus 2.x への移行

  1. Milvus 1.x データの準備

移行プロセスを素早く体験していただくために、Milvus Migrationのソースコードに10,000件のMilvus 1.x テストデータ レコードを用意しました。しかし、実際のケースでは、移行プロセスを開始する前に、Milvus 1.xインスタンスから独自のmeta.jsonファイルをエクスポートする必要があります。

  • 以下のコマンドでエクスポートできます。
./milvus-migration export -m "user:password@tcp(adderss)/milvus?charset=utf8mb4&parseTime=True&loc=Local" -o outputDir

必ず

  • プレースホルダを実際の MySQL 認証情報に置き換えます。

  • このエクスポートを実行する前に、Milvus 1.x サーバを停止するか、データの書き込みを停止してください。

  • Milvus の tables フォルダと meta.json ファイルを同じディレクトリにコピーする。

注意: Zilliz Cloud(Milvusのフルマネージドサービス)上でMilvus 2.xを使用している場合、Cloud Consoleを使用して移行を開始することができます。

  1. コンパイルとビルド

まず、Milvus MigrationのソースコードをGitHubからダウンロードしてください。そして、以下のコマンドを実行してコンパイルします。

go get
ビルドする

このステップは milvus-migration という名前の実行ファイルを生成する。

  1. migration.yaml`を設定する。

migration.yaml`設定ファイルを用意し、ソース、ターゲット、その他の関連する設定の詳細を指定します。以下に設定例を示す:

# Milvus 1.x から Milvus 2.x へのマイグレーション設定


dumper:
  worker:
    リミット: 2
    ワークモード: milvus1x
    リーダー
      バッファサイズ: 1024
    ライター
      バッファサイズ: 1024
ローダー
  ワーカー
    リミット: 16
meta:
  モード: local
  localFile: /outputDir/test/meta.json


ソース
  モード:ローカル
  ローカル
    tablesDir: /db/tables/


ターゲット
  モード: リモート
  リモート
    出力ディレクトリ: "migration/test/xx"
    ak: xxxx
    sk: xxxx
    クラウド: aws
    エンドポイント: 0.0.0.0:9000
    リージョン: ap-southeast-1
    バケット: a-bucket
    useIAM: false
    useSSL: false
    checkBucket: true
  milvus2x:
    エンドポイント: localhost:19530
    ユーザー名: xxxxx
    パスワード: xxxxx

設定ファイルの詳細については、GitHubのこのページを参照してください。

  1. 移行ジョブの実行

マイグレーションを終了するには、dumpコマンドとloadコマンドを別々に実行する必要があります。これらのコマンドはデータを変換し、Milvus 2.xにインポートします。

注意:まもなくこのステップを簡略化し、1つのコマンドで移行を完了できるようにします。ご期待ください。

**ダンプ・コマンド

./milvus-migration dump --config=/{YourConfigFilePath}/migration.yaml

** ロードコマンド:**

./milvus-migration load --config=/{YourConfigFilePath}/migration.yaml

マイグレーション後、Milvus 2.xで生成されるコレクションには2つのフィールドが含まれます:idとdata` です。詳細はAttu というオールインワンのベクターデータベース管理ツールを使って見ることができます。

FAISS から Milvus 2.x へのマイグレーション

  1. FAISSデータの準備

Elasticsearch のデータを移行するには、FAISS データを用意する必要があります。マイグレーションをすぐに体験できるように、Milvus Migration のソースコードに FAISS テストデータ を用意しました。

  1. コンパイルとビルド

まず、Milvus MigrationのソースコードをGitHubからダウンロードしてください。そして、以下のコマンドを実行してコンパイルします。

go get
ビルドする

このステップで milvus-migration という名前の実行ファイルが生成される。

  1. migration.yaml`を設定する。

FAISSマイグレーション用の設定ファイル migration.yaml を用意し、マイグレーション元、マイグレーション先、その他関連する設定の詳細を指定する。以下に設定例を示す:

# FAISS から Milvus 2.x へのマイグレーション設定


dumper:
  worker:
    リミット: 2
    workMode:FAISS
    リーダー
      バッファサイズ: 1024
    ライター
      バッファサイズ: 1024
ローダ
  ワーカー
    リミット: 2
ソース
  モード: ローカル
  ローカル:
    FAISSFile: ./testfiles/FAISS/FAISS_ivf_flat.index


ターゲット
  を作成する:
    コレクション
      名前: test1w
      shardsNums: 2
      dim: 256
      metricType:L2
  モード: リモート
  リモート
    outputDir: testfiles/output/
    クラウド: aws
    エンドポイント: 0.0.0.0:9000
    リージョン: ap-southeast-1
    バケット: a-bucket
    ak: minioadmin
    sk: minioadmin
    useIAM: false
    useSSL: false
    checkBucket: true
  milvus2x:
    エンドポイント: localhost:19530
    ユーザー名: xxxxx
    パスワード: xxxxx

設定ファイルの詳細については、GitHubのこのページを参照してください。

  1. 移行ジョブの実行

Milvus1.xからMilvus2.xへのマイグレーションと同様に、FAISSマイグレーションでもdumpコマンドとloadコマンドの両方を実行する必要があります。これらのコマンドはデータを変換し、Milvus 2.xにインポートします。

注意: 近日中にこのステップを簡略化し、1つのコマンドで移行を完了できるようにする予定です。ご期待ください。

**ダンプコマンド

./milvus-migration dump --config=/{YourConfigFilePath}/migration.yaml

**ロードコマンド

./milvus-migration load --config=/{YourConfigFilePath}/migration.yaml

Attu](https://zilliz.com/attu)は、オールインワンのベクターデータベース管理ツールです。

今後の移行計画にご期待ください

将来的には、より多くのデータソースからの移行をサポートし、以下のような移行機能を追加する予定です:

  • RedisからMilvusへのマイグレーションをサポートします。

  • MongoDBからMilvusへのマイグレーションをサポートします。

  • リジューム可能なマイグレーションをサポート

  • ダンプとロードのプロセスを1つにまとめることで、マイグレーションコマンドを簡素化。

  • 他の主流データソースからMilvusへのマイグレーションをサポート。

結論

Milvusの最新リリースであるMilvus 2.3は、データ管理のニーズの高まりに対応するエキサイティングな新機能とパフォーマンスの向上をもたらします。お客様のデータをMilvus 2.xに移行することで、これらの利点を引き出すことができ、Milvus移行プロジェクトは移行プロセスを合理的かつ容易にします。ぜひ一度お試しください。

***本ブログの情報は、2023年9月現在のMilvusおよびMilvus Migrationプロジェクトの状況に基づいています。最新の情報や手順については、公式のMilvus documentationをご確認ください。

Updated on Jul 09, 2026