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

ApsaraDB for MongoDB:NimoShake - Amazon DynamoDB から Alibaba Cloud への移行

最終更新日:Jul 07, 2025

NimoShake(DynamoShake とも呼ばれます)は、Alibaba Cloud によって開発されたデータ同期ツールです。 Amazon DynamoDB データベースを Alibaba Cloud に移行できます。

前提条件

ApsaraDB for MongoDB インスタンスが作成されていること。 詳細については、「レプリカセットインスタンスを作成する」または「シャーディングクラスタインスタンスを作成する」をご参照ください。

背景情報

NimoShake は、主に Amazon DynamoDB データベースからの移行用に設計されています。 移行先は ApsaraDB for MongoDB データベースである必要があります。詳細については、「NimoShake の概要」をご参照ください。

重要な考慮事項

  • リソース消費。 完全なデータ移行では、ソースデータベースとターゲットデータベースの両方でリソースが消費されます。 これにより、データベースサーバーの負荷が増加する可能性があります。 データベースのトラフィックが多い場合、またはサーバーの仕様が非常に低い場合は、データベースの負荷が増加する可能性があります。 データを移行する前に、パフォーマンスへの潜在的な影響を慎重に評価し、ピーク時以外の時間にマイグレーションを実行することを強くお勧めします。

  • ストレージ容量。 ApsaraDB for MongoDB インスタンスのストレージ容量が Amazon DynamoDB データベースのストレージ容量よりも大きいことを確認してください。

主な用語

  • 再開可能な転送: この機能は、転送のためにタスクを複数の部分に分割します。 ネットワーク障害などの理由で転送が中断された場合、タスクは最初からやり直すのではなく、中断したところから再開できます。

    説明
    • 完全移行では、再開可能な転送はサポートされていません。

    • 増分移行では、再開可能な転送がサポートされています。 増分同期の接続が短期間で失われて回復した場合、同期は継続できます。 ただし、長時間切断された場合や以前のチェックポイントが失われた場合など、特定の状況では、完全同期が再度トリガーされる場合があります。

  • チェックポイント: 増分同期の再開可能な転送は、チェックポイントによって実現されます。 デフォルトでは、チェックポイントはターゲット MongoDB データベース、具体的には nimo-shake-checkpoint という名前のデータベースに書き込まれます。 各コレクションは独自のチェックポイントテーブルを記録し、status_table は現在の同期が完全タスクか増分タスクかを記録します。

NimoShake の機能

NimoShake は現在、2 つのステップで実行される分離された同期メカニズムをサポートしています。

  1. 完全データ移行。

  2. 増分データ移行。

完全移行

完全移行は、データ移行とインデックス移行の 2 つの部分で構成されます。 次の図は、基本的なアーキテクチャを示しています。全量同步基本架构

  • データ移行: NimoShake は、複数の同時スレッドを使用してソースデータを取得します。次の図を参照してください。数据同步

    スレッド

    説明

    Fetcher

    Amazon が提供するプロトコル変換ドライバーを呼び出して、ソーステーブルからデータをバッチ取得し、すべてのソースデータが取得されるまでキューに配置します。

    説明

    Fetcher スレッドは 1 つだけ提供されます。

    Parser

    キューからデータを読み取り、BSON 構造に解析します。 データが解析されると、パーサーはデータを Executor のスレッドに書き込みます。 複数のパーサースレッドを開始できます。 デフォルト値は 2 です。 FullDocumentParser パラメーターを使用して、パーサースレッドの数を調整します。

    Executor

    キューからデータを取得し、データを集約してターゲット ApsaraDB for MongoDB データベースに書き込みます。 最大 16 MB のデータまたは 1,024 エントリを集約できます。 複数の Executor スレッドを開始できます。 デフォルト値は 4 です。 FullDocumentConcurrency パラメーターを使用して、Executor スレッドの数を調整します。

  • インデックス移行: NimoShake は、データ移行の完了後にインデックスを作成します。 インデックスは、自動生成インデックスとユーザー作成インデックスに分類されます。

    • 自動生成インデックス:

      • パーティションキーとソートキーがある場合、NimoShake は一意な複合インデックスを作成し、MongoDB に書き込みます。

      • NimoShake は、パーティションキーのハッシュインデックスも作成し、MongoDB に書き込みます。

      • パーティションキーのみがある場合、NimoShake は MongoDB にハッシュインデックスと一意なインデックスを作成します。

    • ユーザー作成インデックス: ユーザー作成インデックスがある場合、NimoShake はプライマリキーに基づいてハッシュインデックスを作成し、ターゲット ApsaraDB for MongoDB データベースに書き込みます。

増分移行

増分移行はデータのみを同期します。増分同期プロセス中に生成されたインデックスは同期しません。 基本的なアーキテクチャは次のとおりです。增量同步架构图

スレッド

説明

Fetcher

ストリーム内のシャードの変更を監視します。

Manager

メッセージ通知と Dispatcher の作成を管理します。 各シャードは 1 つの Dispatcher に対応します。

Dispatcher

ソースから増分データを取得します。 再開可能な転送の場合、データの取得は最初からではなく、最後のチェックポイントから再開されます。

Batcher

Dispatcher スレッドによって取得された増分データを解析、パッケージ化、および集約します。

Executor

集約されたデータをターゲット ApsaraDB for MongoDB データベースに書き込み、チェックポイントを更新します。

手順: Amazon DynamoDB から Alibaba Cloud に移行する (Ubuntu の例)

このセクションでは、Ubuntu システムを例として使用して、NimoShake を使用して Amazon DynamoDB データベースを ApsaraDB for MongoDB に移行する方法を示します。

  1. NimoShake をダウンロードする: 次のコマンドを実行して、NimoShake パッケージをダウンロードします。

    wget https://github.com/alibaba/NimoShake/releases/download/release-v1.0.14-20250704/nimo-shake-v1.0.14.tar.gz
    説明

    最新バージョンの NimoShake パッケージをダウンロードすることをお勧めします。

  2. パッケージを解凍する: 次のコマンドを実行して、NimoShake パッケージを解凍します。

    tar zxvf nimo-shake-v1.0.14.tar.gz
  3. ディレクトリにアクセスする: 解凍後、cd nimo-shake-v1.0.14 コマンドを実行して、nimo フォルダーに移動します。

  4. 構成ファイルを開く: vi nimo-shake.conf コマンドを実行して、NimoShake 構成ファイルを開きます。

  5. NimoShake を構成する: nimo-shake.conf ファイル内のパラメーターを構成します。 次の表に、各構成項目を示します。

    パラメーター

    説明

    id

    移行タスクの ID。 これはカスタマイズ可能で、PID ファイル、ログ名、チェックポイントストレージのデータベース名、およびターゲットデータベース名の出力に使用されます。

    id = nimo-shake

    log.file

    ログファイルのパス。 このパラメーターが構成されていない場合、ログは stdout に表示されます。

    log.file = nimo-shake.log

    log.level

    ログレベル。 有効な値:

    • none: ログなし

    • error: エラーメッセージ

    • warn: 警告情報

    • info: システムステータス

    • debug: デバッグ情報

    デフォルト値: info

    log.level = info

    log.buffer

    ログバッファリングを有効にするかどうかを指定します。 有効な値:

    • true: ログバッファリングが有効です。 ログバッファリングにより高パフォーマンスが保証されますが、終了時に最新のログエントリの一部が失われる可能性があります。

    • false: ログバッファリングが無効です。 無効にすると、パフォーマンスが低下する可能性があります。 ただし、すべてのログエントリは終了時に表示されます。

    デフォルト値: true

    log.buffer = true

    system_profile

    PPROF ポート。デバッグとスタックフルコルーチン情報の表示に使用されます。

    system_profile = 9330

    full_sync.http_port

    完全移行フェーズの RESTful ポート。 curl を使用して、内部監視統計を表示します。 詳細については、wiki を参照してください。

    full_sync.http_port = 9341

    incr_sync.http_port

    増分移行フェーズの RESTful ポート。 curl を使用して、内部監視統計を表示します。 詳細については、wiki を参照してください。

    incr_sync.http_port = 9340

    sync_mode

    データ移行のタイプ。 有効な値:

    • all: 完全移行と増分移行

    • full: 完全移行のみ

    デフォルト値: all

    説明

    ソースが DynamoDB プロトコルと互換性のある ApsaraDB for MongoDB インスタンスの場合、full のみがサポートされます。

    sync_mode = all

    incr_sync_parallel

    並列増分移行を実行するかどうかを指定します。 有効な値:

    • true: 並列増分移行が有効です。 これにより、より多くのメモリが消費されます。

    • false: 並列増分移行が無効です。

    デフォルト値: false

    incr_sync_parallel = false

    source.access_key_id

    Amazon DynamoDB データベースの AccessKey ID。

    source.access_key_id = xxxxxxxxxxx

    source.secret_access_key

    Amazon DynamoDB データベースの AccessKey シークレット。

    source.secret_access_key = xxxxxxxxxx

    source.session_token

    Amazon DynamoDB データベースにアクセスするための一時キー。 一時キーを使用しない場合はオプションです。

    source.session_token = xxxxxxxxxx

    source.region

    Amazon DynamoDB データベースのリージョン。 リージョンが適用されないか、自動検出される場合はオプションです。

    source.region = us-east-2

    source.endpoint_url

    ソースがエンドポイントタイプの場合は構成可能です。

    重要

    このパラメーターを有効にすると、上記のソース関連パラメーターがオーバーライドされます。

    source.endpoint_url = "http://192.168.0.1:1010"

    source.session.max_retries

    セッション失敗後の最大再試行回数。

    source.session.max_retries = 3

    source.session.timeout

    セッションタイムアウト期間。 0 は、セッションタイムアウトが無効になっていることを示します。 単位: ミリ秒。

    source.session.timeout = 3000

    filter.collection.white

    移行するコレクション名のホワイトリスト。 たとえば、filter.collection.white = c1;c2 は、c1 コレクションと c2 コレクションが移行され、他のコレクションは除外されることを示します。

    filter.collection.white = c1;c2

    filter.collection.black

    除外するコレクションの名前。 たとえば、filter.collection.black = c1;c2 は、c1 コレクションと c2 コレクションが除外され、他のコレクションは移行されることを示します。

    重要

    filter.collection.white と同時に使用することはできません。 両方が指定されている場合、すべてのコレクションが移行されます。

    filter.collection.black = c1;c2

    qps.full

    完全移行中に Scan コマンドの実行頻度を制限します(1 秒あたりの最大呼び出し回数)。

    デフォルト値: 1000。

    qps.full = 1000

    qps.full.batch_num

    完全移行中に 1 秒あたりに取得するデータエントリの数。

    デフォルト値: 128。

    qps.full.batch_num = 128

    qps.incr

    増分移行中に GetRecords コマンドの実行頻度を制限します(1 秒あたりの最大呼び出し回数)。

    デフォルト値: 1000。

    qps.incr = 1000

    qps.incr.batch_num

    増分移行で 1 秒あたりに取得するデータエントリの数。

    デフォルト値: 128。

    qps.incr.batch_num = 128

    target.type

    ターゲットデータベースのタイプ。有効な値:

    • mongodb: ApsaraDB for MongoDB インスタンス。

    • aliyun_dynamo_proxy: DynamoDB 互換 ApsaraDB for MongoDB インスタンス。

    target.type = mongodb

    target.address

    ターゲットデータベースの接続文字列。MongoDB 接続文字列と DynamoDB 互換接続アドレスをサポートします。

    MongoDB アドレスの詳細については、「レプリカセットインスタンスに接続する」または「シャーディングクラスタインスタンスに接続する」を参照してください。

    target.address = mongodb://username:password@s-*****-pub.mongodb.rds.aliyuncs.com:3717

    target.mongodb.type

    ターゲット ApsaraDB for MongoDB インスタンスのタイプ。 有効な値:

    • replica: レプリカセットインスタンス。

    • sharding: シャーディングクラスタインスタンス。

    target.mongodb.type = sharding

    target.db.exist

    ターゲットで同じ名前の既存のコレクションを処理する方法を指定します。 有効な値:

    • rename: NimoShake は、タイムスタンプサフィックスを名前に追加することで、既存のコレクションの名前を変更します。 たとえば、NimoShake は c1 を c1.2019-07-01Z12:10:11 に変更します。

      警告

      これはビジネスに影響を与える可能性があります。 事前に準備してください。

    • drop: ターゲットの既存のコレクションを削除します。

    構成されていない場合、ターゲットに同じ名前のコレクションがすでに存在すると、移行はエラーで終了します。

    target.db.exist = drop

    sync_schema_only

    テーブルスキーマのみを移行するかどうかを指定します。 有効な値:

    • true: テーブルスキーマのみが移行されます。

    • false: False。

    デフォルト値: false

    sync_schema_only = false

    full.concurrency

    完全移行で同時に移行できるコレクションの最大数。

    デフォルト値: 4。

    full.concurrency = 4

    full.read.concurrency

    完全移行中のテーブル内のドキュメントレベルの同時実行性。 このパラメーターは、単一のテーブルのソースから同時に読み取ることができるスレッドの最大数を示し、Scan インターフェースの TotalSegments パラメーターに対応します。

    完全移行中に、ソースの単一テーブルからドキュメントを同時に読み取る同時スレッドの数。 Scan インターフェースの TotalSegments パラメーターに対応します。

    full.read.concurrency = 1

    full.document.concurrency

    完全移行のパラメーター。 完全移行中に、単一テーブルのドキュメントをターゲットに書き込む同時スレッドの数。 デフォルト: 4

    デフォルト値: 4。

    full.document.concurrency = 4

    full.document.write.batch

    一度に集約して書き込むデータエントリの数。 ターゲットが DynamoDB プロトコル互換データベースの場合、最大値は 25 です。

    full.document.write.batch = 25

    full.document.parser

    完全移行のパラメーター。 DynamoDB プロトコルデータをターゲットの対応するプロトコルに変換する同時パーサースレッドの数。

    デフォルト値: 2。

    full.document.parser = 2

    full.enable_index.user

    完全移行のパラメーター。 ユーザー定義のインデックスを移行するかどうかを指定します。 有効な値:

    • true: はい。

    • false: いいえ。

    デフォルト値: true

    full.enable_index.user = true

    full.executor.insert_on_dup_update

    完全移行のパラメーター。 ターゲットで重複キーが発生した場合に、INSERT 操作を UPDATE 操作に変更するかどうかを指定します。 有効な値:

    • true: はい。

    • false: いいえ。

    デフォルト値: true

    full.executor.insert_on_dup_update = true

    increase.concurrency

    増分移行のパラメーター。 同時にキャプチャできるシャードの最大数。

    デフォルト値: 16。

    increase.concurrency = 16

    increase.executor.insert_on_dup_update

    増分移行のパラメーター。 ターゲットに同じキーが存在する場合に、INSERT 操作を UPDATE 操作に変更するかどうかを指定します。 有効な値:

    • true: はい。

    • false: いいえ。

    デフォルト値: true

    increase.executor.insert_on_dup_update = true

    increase.executor.upsert

    増分移行のパラメーター。 ターゲットでキーが見つからない場合に、UPDATE 操作を UPSERT 操作に変更するかどうかを指定します。 有効な値:

    • true: はい

    • false: いいえ

    説明

    UPSERT 操作は、指定されたキーが存在するかどうかを確認します。 存在する場合、UPDATE 操作が実行されます。 それ以外の場合、INSERT 操作が実行されます。

    increase.executor.upsert = true

    checkpoint.type

    再開可能な転送(チェックポイント)情報のストレージタイプ。 有効な値:

    • mongodb: チェックポイント情報は ApsaraDB for MongoDB データベースに保存されます。 この値は、target.type パラメーターが mongodb に設定されている場合にのみ使用できます。

    • file: チェックポイント情報はコンピューターに保存されます。

    checkpoint.type = mongodb

    checkpoint.address

    チェックポイント情報を保存するアドレス。

    • checkpoint.type パラメーターが mongodb に設定されている場合は、ApsaraDB for MongoDB データベースの接続文字列を入力します。 構成されていない場合、チェックポイント情報はターゲット ApsaraDB for MongoDB データベースに保存されます。 詳細については、「レプリカセットインスタンスに接続する」または「シャーディングクラスタインスタンスに接続する」を参照してください。

    • checkpoint.type パラメーターが file に設定されている場合は、相対パス(チェックポイントなど)を入力します。 構成されていない場合、デフォルトでは NimoShake 実行可能ファイルに対する相対パスのチェックポイントフォルダーになります。

    checkpoint.address = mongodb://username:password@s-*****-pub.mongodb.rds.aliyuncs.com:3717

    checkpoint.db

    チェックポイント情報のデータベースの名前。 構成されていない場合、データベース名は <id>-checkpoint 形式になります。

    例: nimo-shake-checkpoint

    checkpoint.db = nimo-shake-checkpoint

    convert._id

    DynamoDB の _id フィールドにプレフィックスを追加して、MongoDB の _id フィールドとの競合を回避します。

    convert._id = pre

    full.read.filter_expression

    完全移行中にフィルタリングに使用する DynamoDB 式。 :begin:end は、コロンで始まる変数です。 実際の値は、filter_attributevalues で指定されます。

    full.read.filter_expression = create_time > :begin AND create_time < :end

    full.read.filter_attributevalues

    完全移行フィルタリングの filter_expression の変数に対応する値。

    N は Number を表し、S は String を表します。

    full.read.filter_attributevalues = begin```N```1646724207280~~~end```N```1646724207283

  6. 移行を開始する: 次のコマンドを実行して、構成済みの nimo-shake.conf ファイルを使用してデータ移行を開始します。

    ./nimo-shake.linux -conf=nimo-shake.conf
    説明

    完全移行が完了すると、full sync done! と表示されます。 エラーが原因で移行が終了した場合、プログラムは自動的に閉じられ、対応するエラーメッセージが出力されてトラブルシューティングに役立ちます。