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

ApsaraDB for MongoDB:NimoShakeを使用してAmazon DynamoDBデータベースからApsaraDB for MongoDBにデータを移行する

最終更新日:Jul 03, 2024

DynamoShakeとも呼ばれるNimoShakeは、Alibaba Cloudによって開発されたデータ同期ツールです。 このツールを使用して、Amazon DynamoDBデータベースからApsaraDB for MongoDBにデータを移行できます。

前提条件

ApsaraDB for MongoDB インスタンスを作成済み。 詳細は、レプリカセットインスタンスの作成 または シャードクラスターインスタンスの作成 をご参照ください。

背景情報

このトピックでは、NimoShakeの使用方法について説明します。

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

使用上の注意

完全なデータ移行では、ソースデータベースとターゲットデータベースのリソースが消費され、データベースサーバーの負荷が増加する可能性があります。 大量のデータを移行したり、サーバーの仕様が制限されている場合、データベースサービスが利用できなくなることがあります。 データを移行する前に、移行元データベースと移行先データベースのパフォーマンスに対するデータ移行の影響を評価します。 オフピーク時にデータを移行することを推奨します。

用語

  • 再開可能送信: 再開可能送信タスクにおいて、データは複数のチャンクに分割される。 ネットワーク障害または他の原因により送信が中断された場合、タスクは、最初から再開されるのではなく、中断された場所から再開され得る。

    説明

    増分移行では再開可能な送信がサポートされますが、完全移行ではサポートされません。 増分移行タスクが切断により中断され、短い時間範囲で接続が回復した場合、タスクを再開できます。 しかしながら、長期の切断または前のチェックポイントの喪失などのいくつかの状況では、完全な移行が再開され得る。

  • チェックポイント: チェックポイントに基づいて再開可能な送信が行われます。 デフォルトのチェックポイントは、dynamo-shake-checkpointという名前のApsaraDB for MongoDBデータベースに書き込まれます。 各コレクションはチェックポイントリストを記録し、status_tableコレクションは現在のタスクが完全移行であるか増分移行であるかを記録します。

NimoShakeの特徴

NimoShakeは、最初に完全移行を実行し、次に増分移行を実行します。

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

    • データ移行: 次の図に示すように、NimoShakeは複数の同時スレッドを使用してソースデータをプルします。数据同步

      スレッド

      説明

      Fetcher

      Amazonが提供するプロトコル変換ドライバーを呼び出して、ソースコレクションのデータをバッチでプルし、すべてのソースデータがプルされるまでデータをキューに配置します。

      説明

      1つのフェッチャースレッドのみが提供されます。

      Parser

      キューからデータを読み取り、データをBSON構造に解析します。 データが解析された後、パーサスレッドは、データを実行スレッドのキューにエントリとして書き込む。 複数のパーサスレッドを起動できます。 FullDocumentParserパラメーターを設定して、パーサスレッドの数を指定できます。 このパラメーターのデフォルト値は2です。

      Executor

      キューからデータを取得し、データを集約してターゲットApsaraDB for MongoDBデータベースに書き込みます。 1,024エントリで最大16 MBのデータを集約できます。 複数のエグゼキュータスレッドを起動できます。 FullDocumentConcurrencyパラメーターを設定して、エグゼキュータースレッドの数を指定できます。 このパラメーターのデフォルト値は4です。

    • インデックス移行: データ移行が完了した後、NimoShakeはインデックスを書き込みます。 インデックスには、自動生成インデックスとユーザー作成インデックスが含まれます。

      • 自動生成インデックス: パーティションキーとソートキーがある場合、NimoShakeは一意の複合インデックスを作成し、そのインデックスをターゲットApsaraDB for MongoDBデータベースに書き込みます。 また、NimoShakeはパーティションキーのハッシュインデックスを作成し、そのインデックスをApsaraDB for MongoDBデータベースに書き込みます。 パーティションキーしかない場合、NimoShakeはハッシュインデックスと一意のインデックスをターゲットApsaraDB for MongoDBデータベースに書き込みます。

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

  • 増分移行: NimoShakeはデータを移行しますが、生成されたインデックスは移行しません。 次の図は、増分移行の基本アーキテクチャを示しています。增量同步架构图

    スレッド

    説明

    Fetcher

    ストリーム内のシャードの変化を感知します。

    Manager

    メッセージを送信するか、メッセージを処理するディスパッチャを作成します。 1つのシャードは1つのディスパッチャに対応します。

    Dispatcher

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

    Batcher

    ディスパッチャスレッドによってプルされた増分データを解析、パッケージ化、および集計します。

    Executor

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

Amazon DynamoDBデータベースをApsaraDB for MongoDBに移行する

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

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

    wget

    https://github.com/alibaba/NimoShake/releases/download/release-v1.0.13-20220411/nimo-shake-v1.0.13.tar.gz
    説明

    最新のNimoShakeパッケージをダウンロードすることを推奨します。 ダウンロードアドレスの詳細については、「NimoShake」をご参照ください。

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

    tar zxvf nimo-shake-v1.0.13.tar.gz
  3. 解凍後、cd nimonimoフォルダにアクセスするには、

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

  5. NimoShakeの次の表のパラメーターを設定します。

    パラメーター

    説明

    id

    移行タスクの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

    http_profile

    HTTPポート。 このポートを有効にすると、インターネット経由でNimoShakeの現在のステータスを表示できます。

    http_profile = 9340

    sync_mode

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

    • all: 完全移行と増分移行が実行されます。

    • full: 完全移行のみが実行されます。

    • incr: 増分移行のみが実行されます。

    デフォルト値: all。

    説明

    完全移行と増分移行はデフォルトで実行されます。 完全移行または増分移行のみを実行する場合は、パラメーター値をfullまたはincrに変更します。

    sync_mode=すべて

    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.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およびfilter.collection.blackパラメーターは指定できません。 それ以外の場合は、すべてのコレクションが移行されます。

    filter.collection.white = c1;c2

    filter.collection.black

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

    説明

    filter.collection.whiteおよびfilter.collection.blackパラメーターは指定できません。 それ以外の場合は、すべてのコレクションが移行されます。

    filter.collection.black = c1;c2

    qps.full

    完全移行時の1秒あたりのscanコマンドの最大呼び出し回数。 scanコマンドの実行頻度を制限するために使用します。 デフォルト値は 1000 です。

    qps.full = 1000

    qps.full.batch_num

    完全移行で1秒あたりにプルされたデータエントリの数。 デフォルト値: 128

    qps.full.batch_num = 128

    qps.incr

    増分移行の1秒あたりのGetRecordsコマンドの最大呼び出し数。 GetRecordsコマンドの実行頻度を制限するために使用します。 デフォルト値は 1000 です。

    qps.incr = 1000

    qps.incr.batch_num

    増分移行で1秒あたりにプルされるデータエントリの数。 デフォルト値: 128

    qps.incr.batch_num = 128

    target.type

    ターゲットデータベースのカテゴリ。 有効な値:

    • mongodb: ApsaraDB for MongoDBデータベース。

    target.type = mongodb

    target.mongodb.type

    ターゲットApsaraDB for MongoDBデータベースのカテゴリ。 有効な値:

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

    • sharding: シャードクラスタインスタンス。

    target.mo ngodb.type=シャーディング

    target.address

    ターゲットApsaraDB for MongoDBデータベースの接続アドレス。ApsaraDB for MongoDBインスタンスの接続文字列にすることができます。.

    ApsaraDB For MongoDBインスタンスの接続文字列を取得する方法の詳細については、「レプリカセットインスタンスへの接続」または「シャードクラスターインスタンスへの接続」をご参照ください。

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

    target.db.exist

    コピー先の別のコレクションと同じ名前の既存のコレクションを処理する方法を指定します。 有効な値:

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

      警告

      この操作は、宛先コレクションの名前を変更し、ビジネスの中断を引き起こす可能性があります。 データ移行の前に準備をする必要があります。

    • drop: NimoShakeは、別のコレクションと同じ名前の既存のコレクションを削除します。

    このパラメーターが指定されておらず、宛先に別のコレクションと同じ名前のコレクションがすでに含まれている場合、移行タスクは終了し、エラーメッセージが返されます。

    target.db.exist = drop

    full.concurrency

    完全移行で同時に移行できるコレクションの最大数。 デフォルト値: 4。

    full.concurrency = 4

    full.document.concurrency

    完全移行のパラメーター。 コレクション内のドキュメントを宛先に書き込むために同時に使用されるスレッドの最大数。 デフォルト値: 4。

    full.doc ument.concurrency = 4

    full.document.parser

    完全移行のパラメーター。 Dynamoプロトコルを宛先の対応するプロトコルに変換するために同時に使用されるパーサスレッドの最大数。 デフォルト値:2

    full.doc ument.parser = 2

    full.enable_index.user

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

    • true

    • false

    full.enable_index.user = true

    full.exe cutor.insert_on_dup_update

    完全移行のパラメーター。 コピー先に同じキーが存在する場合、INSERTステートメントをUPDATEステートメントに変更するかどうかを指定します。 有効な値:

    • true

    • false

    full.exe cutor.insert_on_dup_update = true

    increase.exe cutor.insert_on_dup_update

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

    • true

    • false

    increase.exe cutor.insert_on_dup_update = true

    increase.executor.upsert

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

    • true

    • false

    説明

    UPSERT操作は、指定されたキーが存在するかどうかをチェックします。 キーが存在する場合、UPDATE操作が実行されます。 そうでなければ、INSERT操作が実行される。

    increase.exe cutor.upsert = true

    convert.type

    増分移行のパラメーター。 Dynamoプロトコルを変換するかどうかを指定します。 有効な値:

    • raw: Dynamoプロトコルを変換せずにデータを直接書き込みます。

    • change: Dynamoプロトコルを変換します。 たとえば、NimoShakeは {"hello":"1"}{"hello": 1} に変換します。

    convert.type = change

    increase.concurrency

    増分移行のパラメーター。 同時にキャプチャできるシャードの最大数。 デフォルト値: 16。

    increase.concurrency = 16

    checkpoint.type

    チェックポイント情報を格納するストレージのタイプ。 有効な値:

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

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

    checkpoint.type = mongodb

    checkpoint.address

    チェックポイント情報の格納に使用されるアドレス。

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

    • checkpoint.typeパラメーターがfileに設定されている場合、NimoShakeファイルのパスに基づく相対パスを入力します。 例: checkpoint このパラメーターを指定しない場合、チェックポイント情報はチェックポイントフォルダーに保存されます。

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

    checkpoint.db

    チェックポイント情報が格納されているデータベースの名前。 このパラメーターを指定しない場合、データベース名は <Task ID>-checkpoint形式になります。 例: nimoshake-checkpoint。

    checkpoint.db = nimoshake-checkpoint

  6. 次のコマンドを実行して、設定されたnimo-shake.confファイルを使用してデータ移行を開始します。

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

    完全な移行が完了したら、完全な同期が完了しました! が画面に表示されます。 エラーにより移行が終了した場合、NimoShakeは自動的に停止し、エラーのトラブルシューティングを行うための対応するエラーメッセージが画面に表示されます。