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

milvus-logo
LFAI
  • Home
  • Blog
  • Milvusにデータをシームレスに移行する方法:包括的ガイド

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

  • Engineering
December 01, 2023
Wenhui Zhang

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

2023年9月現在、MilvusはGitHubで約23,000のスターを獲得しており、様々な業種から様々なニーズを持つ数万人のユーザーを抱えています。ChatGPTのようなジェネレーティブAI技術が普及するにつれ、その人気はさらに高まっている。特に、大規模言語モデルの幻覚問題に対処する検索拡張生成フレームワークなど、様々なAIスタックに欠かせないコンポーネントとなっている。

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

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

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

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

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

Milvus 1.x および FAISS から Milvus 2.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マイグレーションは、堅牢な機能セットによりマイグレーションプロセスを簡素化します:

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

    • 対応データソース: Milvus 1.x から Milvus 2.x

    • Elasticsearch 7.0以降からMilvus 2.xへ

    • FAISSからMilvus 2.x

  • 複数の対話モード

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

    • Swagger UIを組み込んだレストフルAPI

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

  • 多彩なファイルフォーマットのサポート

    • ローカルファイル

    • Amazon S3

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

    • Google Cloud Platform (GCP)

  • 柔軟なElasticsearchとの統合:

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

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

インターフェース定義

Milvusマイグレーションは以下の主要なインターフェースを提供します:

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

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

  • /load:ロードジョブの開始(移行先記憶媒体からMilvus 2.xへのデータ書き込み)

  • /get_job:ジョブの実行結果を表示します。(詳細はプロジェクトのserver.goを参照)

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

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

  1. Elasticsearch データの準備

Elasticsearch のデータを移行するには、Elasticsearch サーバーをセットアップしておく必要があります。dense_vector フィールドにベクトルデータを格納し、他のフィールドでインデックスを作成する必要があります。インデックスのマッピングは以下の通りです。

  1. コンパイルとビルド

まず、MilvusマイグレーションのソースコードをGitHubからダウンロードします。次に、以下のコマンドを実行してコンパイルします。

go get
go build

このステップにより、milvus-migration という名前の実行ファイルが生成されます。

  1. 設定migration.yaml

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

# Configuration for Elasticsearch to Milvus 2.x migration


dumper:
  worker:
    workMode: Elasticsearch
    reader:
      bufferSize: 2500
meta:
  mode: config
  index: test_index
  fields:
    - name: id
      pk: true
      type: long
    - name: other_field
      maxLen: 60
      type: keyword
    - name: data
      type: dense_vector
      dims: 512
  milvus:
      collection: "rename_index_test"
      closeDynamicField: false
      consistencyLevel: Eventually
      shardNum: 1


source:
  es:
    urls:
      - http://localhost:9200
    username: xxx
    password: xxx


target:
  mode: remote
  remote:
    outputDir: outputPath/migration/test1
    cloud: aws
    region: us-west-2
    bucket: xxx
    useIAM: true
    checkBucket: false
  milvus2x:
    endpoint: {yourMilvusAddress}:{port}
    username: ******
    password: ******

設定ファイルの詳細については、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_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] [beforeTotalCount=50000] [afterTotalCount=100000] [totalIncrease=50000][migration/es_starter.go:25] ["[Starter] migration ES to Milvus finish!!!"] [Cost=80.009174459][starter/starter.go:106] ["[Starter] Migration Success!"] [Cost=80.00928425][cleaner/remote_cleaner.go:27] ["[Remote Cleaner] Begin to clean files"] [bucket=a-bucket] [rootPath=testfiles/output/zwh/migration][cmd/start.go:32] ["[Cleaner] clean file success!"]

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

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

./milvus-migration server run -p 8080

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

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

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

The Attu interface Attuインターフェース

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サーバを停止するか、データの書き込みを停止してください。

  • Milvustables フォルダとmeta.json ファイルを同じディレクトリにコピーします。

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

  1. コンパイルとビルド

まず、MilvusマイグレーションのソースコードをGitHubからダウンロードします。次に、以下のコマンドを実行してコンパイルします。

go get
go build

このステップにより、milvus-migration という名前の実行ファイルが生成されます。

  1. 設定migration.yaml

migration.yaml 、ソース、ターゲット、その他関連する設定の詳細を指定した設定ファイルを準備します。以下にコンフィギュレーションの例を示す:

# Configuration for Milvus 1.x to Milvus 2.x migration


dumper:
  worker:
    limit: 2
    workMode: milvus1x
    reader:
      bufferSize: 1024
    writer:
      bufferSize: 1024
loader:
  worker:
    limit: 16
meta:
  mode: local
  localFile: /outputDir/test/meta.json


source:
  mode: local
  local:
    tablesDir: /db/tables/


target:
  mode: remote
  remote:
    outputDir: "migration/test/xx"
    ak: xxxx
    sk: xxxx
    cloud: aws
    endpoint: 0.0.0.0:9000
    region: ap-southeast-1
    bucket: a-bucket
    useIAM: false
    useSSL: false
    checkBucket: true
  milvus2x:
    endpoint: localhost:19530
    username: xxxxx
    password: xxxxx

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

  1. 移行ジョブの実行

移行を完了するには、dumpload コマンドを個別に実行する必要があります。これらのコマンドはデータを変換し、Milvus 2.xにインポートします。

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

ダンプ コマンド

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

ロードコマンド

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

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

FAISS から Milvus 2.x への移行

  1. FAISSデータの準備

Elasticsearch のデータを移行するには、FAISS のデータを準備する必要があります。移行プロセスを素早く体験できるように、Milvus MigrationのソースコードにFAISSのテストデータを入れています。

  1. コンパイルとビルド

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

go get
go build

このステップにより、milvus-migration という名前の実行ファイルが生成されます。

  1. 設定migration.yaml

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

# Configuration for FAISS to Milvus 2.x migration


dumper:
  worker:
    limit: 2
    workMode: FAISS
    reader:
      bufferSize: 1024
    writer:
      bufferSize: 1024
loader:
  worker:
    limit: 2
source:
  mode: local
  local:
    FAISSFile: ./testfiles/FAISS/FAISS_ivf_flat.index


target:
  create:
    collection:
      name: test1w
      shardsNums: 2
      dim: 256
      metricType: L2
  mode: remote
  remote:
    outputDir: testfiles/output/
    cloud: aws
    endpoint: 0.0.0.0:9000
    region: ap-southeast-1
    bucket: a-bucket
    ak: minioadmin
    sk: minioadmin
    useIAM: false
    useSSL: false
    checkBucket: true
  milvus2x:
    endpoint: localhost:19530
    username: xxxxx
    password: xxxxx

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

  1. マイグレーションジョブの実行

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

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

ダンプ コマンド

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

ロードコマンド

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

Attu(オールインワンベクターデータベース管理ツール)を使用することで、より詳細な情報を見ることができます。

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

今後、より多くのデータソースからのマイグレーションをサポートし、以下のようなマイグレーション機能を追加していきます:

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

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

  • 再開可能なマイグレーションをサポート

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

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

結論

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

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

Like the article? Spread the word

続けて読む