すべてのプロダクト
Search
ドキュメントセンター

Vector Retrieval Service for Milvus:イメージツールを使用した Alibaba Cloud Milvus へのデータ移行

最終更新日:Apr 21, 2026

セルフマネージドのソース Milvus インスタンスがパブリックにアクセスできない場合、ローカルマシンまたは Alibaba Cloud VPC 内にデータ移行ツールコンテナをデプロイして、データを Alibaba Cloud Milvus に安全に同期します。このプロセスでは、taihao-executor コンテナイメージを使用します。このイメージは、データ整合性と信頼性を確保しながら、複数のコレクションのバッチ移行をサポートします。

制限事項と設定要件

事前準備 (必須)

  1. 操作ステータスの制御

    クラスタータイプ

    要件

    説明

    ソースクラスター

    すべてのデータ変更操作を停止

    これには、書き込み、削除、更新操作が含まれます。移行中のデータ不整合を防ぐため、クラスターが読み取り専用状態であることを確認してください。

    宛先クラスター

    すべてのデータ操作を一時停止

    これには、クエリ、書き込み、削除、更新操作が含まれます。移行とのデータ競合を避けるため、クラスターを一時的に利用不可の状態にしてください。

  2. バージョンの互換性

    要件

    仕様

    ソースクラスターのバージョン

    2.3.6 以降 (≥ v2.3.7) である必要があります

    宛先クラスターのバージョン

    ソースクラスターのバージョンと同じか、それ以降である必要があります

移行タスクの制限

  1. タスク管理

    • 同時実行数の制限:一度に実行できる移行タスクは 1 つだけです。

  2. データ範囲

    • データベースの制限:各移行タスクは、1 つのデータベースからのみコレクションを移行できます。

    • コレクションの制限:各移行タスクは、最大 5 つのコレクションをサポートします。

    • 合計データサイズ:すべてのコレクションにわたるエンティティの総数が 5 億を超えてはなりません。

  3. データ状態

    • ソースインスタンスの要件:移行するコレクションは、ロード済み状態である必要があります。

    • 宛先インスタンスの要件:宛先インスタンスは空であり、既存のエンティティデータを含んでいない必要があります。

ネットワーク要件

コンテナは、ソースとターゲットの両方の Alibaba Cloud Milvus インスタンスへのネットワークアクセスが必要です。最適なパフォーマンスを得るために、ターゲットインスタンスと同じ VPC にコンテナをデプロイしてください。

操作手順

ステップ 1:移行イメージのプル

docker pull registry.cn-hangzhou.aliyuncs.com/taihao-executor/taihao-executor:release_2.22.0-ali

ステップ 2:コンテナの起動とアクセス

  1. デタッチモードでコンテナを起動します。

    docker run -d -it \
      --name milvus-migration \
      registry.cn-hangzhou.aliyuncs.com/taihao-executor/taihao-executor:release_2.22.0-ali \
      /bin/bash
  2. コンテナ ID を見つけてコンテナにアクセスします。

    # コンテナを検索
    docker ps
    
    # コンテナにアクセス (実際のコンテナ ID に置き換えてください)
    docker exec -it <container_id> bash

    例:

    docker exec -it 55ac98f3b054 bash

ステップ 3:設定ファイル migration.conf の作成

コンテナ内で、設定ファイルを作成します:

vi migration.conf

設定テンプレート

env {
  parallelism = 1           # 同時実行レベル。初期値として 1 に設定することを推奨します。
  job.mode = "BATCH"        # バッチ処理モード。
}

source {
  Milvus {
    url = "http://<source-instance-endpoint>:19530"       # 内部エンドポイントがサポートされています。
    token = "<username>:<password>"                 # 例:root:Test123456@
    database = "default"                    # 移行元のデータベース。デフォルトは `default` です。
    collections = ["col_a", "col_b"]        # 移行するコレクションのリスト。
    batch_size = 10000                      # バッチごとに読み取るエンティティ数。大規模なコレクションの場合は、この値を増やしてください。
  }
}

sink {
  Milvus {
    url = "http://<target-Alibaba-Cloud-Milvus-endpoint>:19530"
    token = "<target-instance-token>"
    database = "default"
    batch_size = 1000
    enable_auto_id = false                 # ソースから自動生成された ID を保持する場合は false に設定します。それ以外の場合は true に設定します。
  }
}

注意事項

  • タスクの失敗を防ぐため、移行対象のすべてのコレクションを load() メソッドを使用してメモリにロードする必要があります。

  • ロード済みのすべてのコレクションを移行するには、設定ファイルから collections パラメーターを省略します。

  • コンテナとターゲットインスタンスが同じリージョンにある場合は、内部エンドポイントを使用して転送速度を向上させます。


ステップ 4:移行タスクの開始

オプション 1:ローカルモード (単一マシン) での実行

nohup ./bin/seatunnel.sh --config ./migration.conf -m local > migration.log 2>&1 &
メモリパラメーターのカスタマイズ (任意)

config/jvm_client_options ファイルを編集します:

-Xms4g
-Xmx8g

Out-of-Memory (OOM) エラーを防ぐために、マシンのリソースに基づいてヒープメモリサイズを設定します。

オプション 2:クラスターモードでの実行 (高パフォーマンス向けに推奨)

このモードは、大量のデータを移行する場合に推奨されます。

# ログディレクトリの作成
mkdir -p ./logs

# クラスターサービスの開始
./bin/seatunnel-cluster.sh -d

# タスクの送信
nohup ./bin/seatunnel.sh --config ./migration.conf > migration.log 2>&1 &

ステップ 5:コレクションのインデックス作成とロード (任意)

移行後、Attu または SDK を使用してターゲットクラスターに接続し、各ターゲットコレクションに対して以下の手順を実行します:

  1. インデックスを作成します。

    milvus_client = milvus.prepare_index_params()
    index_params.add_index(
            field_name="vector",  # インデックスを作成するベクトルフィールドの名前
            index_type="HNSW",  # 作成するインデックスのタイプ
            index_name="vector_index",  # 作成するインデックスの名前
            metric_type="L2",  # 類似性を測定するために使用されるメトリックタイプ
            params={
                "M": 64,  # グラフ内で各ノードが接続できる隣接ノードの最大数
                "efConstruction": 100  # インデックス構築中に接続候補として考慮される隣接ノードの数
            }  # インデックス構築パラメーター
        )
    milvus_client.create_index("collectionName", index_params)
  2. コレクションをメモリにロードします。

    milvus_client.load_collection()

    高速検索を有効にするには、コレクションをロードする前にインデックスを作成する必要があります。主要なパラメーターは以下の通りです:

    パラメーター

    取得方法

    url

    Alibaba Cloud Milvus コンソールにログインします。Security Configuration タブで、パブリックまたは内部エンドポイントを確認します。パフォーマンス向上のため、内部エンドポイントの使用を推奨します。

    token

    トークンのフォーマットは username:password です (例:root:YourPassword123@)。Alibaba Cloud Milvus コンソールにログインします。Security Configuration タブで、ルートアカウントに対応するパスワードを確認します。

    database

    デフォルト値は default です。マルチデータベース機能を使用する場合、list_databases() API を呼び出して他のデータベース名を確認します。

    完全な設定例:

    env {
      parallelism = 1
      job.mode = "BATCH"
    }
    
    source {
      Milvus {
        url = "http://xx.xx.xx.xx:19530"
        token = "root:SourcePass123@"
        database = "default"
        collections = ["medium_articles"]
        batch_size = 10000
      }
    }
    
    sink {
      Milvus {
        url = "http://proxy-bj.vpc.milvus.aliyuncs.com:19530"
        token = "root:TargetPass123@"
        database = "default"
        batch_size = 10000
        enable_auto_id = false
      }
    }

よくある質問

Q1:移行中に「Collection not loaded」エラーが表示されるのはなぜですか?

A:ソースのすべてのコレクションが .load() メソッドを使用してメモリにロードされていることを確認してください。

Q2:特定のフィールドのみを移行できますか?

A:いいえ。現在のバージョンでは、コレクション全体の移行のみがサポートされています。特定のフィールドのフィルタリングはサポートされていません。

Q3:移行の進捗を監視するにはどうすればよいですか?

A:移行の進捗は 2 つの方法で監視できます。migration.log ファイルの出力を確認するか、Attu を使用してターゲットコレクションの行数を監視します。