Data Transmission Service (DTS) を使用して、ApsaraDB for MongoDB のレプリカセットインスタンスから AnalyticDB for PostgreSQL インスタンスへデータを移行します。DTS は完全なデータ移行および増分データ移行をサポートしているため、ダウンタイムを最小限に抑えて切り替えが可能です。
サポートされる機能
| 機能 | 対応状況 | 備考 |
|---|---|---|
| 完全なデータ移行 | はい | すべての既存データを移行します |
| 増分データ移行 | はい | 挿入、更新($set のみ)、削除操作をキャプチャします |
| コレクションレベルの移行 | はい | データベースレベルの移行はサポートされていません |
| シャードクラスターをソースとして使用 | はい | Mongos ノード数は 10 を超えてはなりません。_id はコレクション間で一意である必要があります |
| ETL | はい | タスク構成でデータ処理文を入力します |
| 速度制限 | はい | 完全移行および増分移行の両方で設定可能です |
| 送信先として追記最適化(AO)テーブルを使用 | いいえ | |
| トランザクションの保持 | いいえ | トランザクションは個別のレコードに変換されます |
| 時系列コレクション(MongoDB 5.0+) | いいえ | |
| SRV レコード接続 | いいえ | |
admin、config、local データベースの移行 | いいえ |
課金
| 移行タイプ | リンク構成料金 | データ転送コスト |
|---|---|---|
| 全データ移行 | 無料 | 課金対象項目Alibaba Cloud インスタンスアクセスを使用する場合は無料です。パブリック IP アドレスアクセスを使用する場合は有料です。をご参照ください。 |
| 増分データ移行 | 有料 | 課金概要をご参照ください。 |
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
移行元の ApsaraDB for MongoDB インスタンスが使用しているストレージ領域よりも少なくとも 10 % 大きいストレージ領域を持つ、移行先の AnalyticDB for PostgreSQL インスタンス。詳細については、「インスタンスの作成」をご参照ください。
移行対象データ用に、移行先インスタンスにデータベース、スキーマ、および一意(複合でない)プライマリキーを持つテーブルを作成済みであること。詳細については、「SQL 構文」をご参照ください。
重要移行先テーブルを作成する際は、以下の点にご注意ください。 - MongoDB の
_idフィールド(ObjectId 型)を、AnalyticDB for PostgreSQL の varchar 列にマップします。 - 任意の列名を_idまたは_valueとしないでください。 - フィールドマッピングの構成時に、プライマリキー列の値としてbson_value("_id")を指定します。 - 追記最適化(AO)テーブルは移行先テーブルとしてサポートされていません。シャードクラスターを移行元とする場合:すべてのシャードノードのエンドポイント、およびすべてのシャードで共通のデータベースアカウントとパスワードが必要です。詳細については、「シャードエンドポイントの申請」をご参照ください。
必要な権限を持つデータベースアカウント。詳細については、「必要な権限」をご参照ください。
必要な権限
| データベース | 完全移行 | 増分移行 |
|---|---|---|
| 移行元 ApsaraDB for MongoDB | 移行対象データベースの読み取り | 移行対象のデータベース、管理者データベース、およびローカルデータベースからの読み取り |
| 移行先 AnalyticDB for PostgreSQL | 移行先データベースに対する読み取りおよび書き込み権限 | 移行先データベースに対する読み取りおよび書き込み権限 |
ソースデータベースアカウントの作成および権限付与については、「MongoDB データベースアカウントの権限管理」をご参照ください。
移行先では、初期アカウントまたは RDS_SUPERUSER 権限を持つアカウントを使用してください。詳細については、「ユーザーの作成と管理」および「ユーザー権限の管理」をご参照ください。
制限事項
ソースデータベース
帯域幅:ソースデータベースサーバーには十分なアウトバウンド帯域幅が必要です。そうでないと、移行速度に影響が出ます。
コレクション数の制限:名前マッピングを構成した場合、1 つの移行タスクで最大 1,000 コレクションを移行できます。この制限を超える場合は、オブジェクトを複数のタスクに分割してください。
完全移行のみ対応:スタンドアロンの MongoDB インスタンス、Azure Cosmos DB for MongoDB、Amazon DocumentDB エラスティッククラスターは、完全なデータ移行のみをサポートしています。
増分移行 — oplog/チェンジストリームの保持期間:ソースデータベースでは、oplog を有効化し、少なくとも 7 日間保持するか、またはチェンジストリームを有効化し、少なくとも 7 日間のサブスクライブ可能な履歴を確保する必要があります。この要件を満たさない場合、タスクが失敗したり、データ損失が発生したりする可能性があります。このような問題は Data Transmission Service (DTS) のサービスレベルアグリーメント (SLA) の対象外です。
可能であれば oplog を使用してください。これにより、増分タスクのレイテンシを低減できます。
チェンジストリームは MongoDB 4.0 以降で必要です。
Amazon DocumentDB(非エラスティッククラスター)では、チェンジストリームを手動で有効化し、移行方法 を ChangeStreamチェンジストリーム に設定し、アーキテクチャ を Sharded Cluster に設定する必要があります。
シャードクラスター — 一意の _id:移行対象のすべてのコレクションにおける
_idフィールドは一意である必要があります。そうでないと、データの不整合が発生する可能性があります。シャードクラスター — Mongos ノード数:Mongos ノード数は 10 を超えてはなりません。
シャードクラスター — 孤立ドキュメント: クラスターに孤立ドキュメントが存在しないことを確認してください。そうしないと、データの不整合やタスクの失敗が発生する可能性があります。詳細については、「孤立ドキュメント」および「MongoDB シャードクラスターから孤立ドキュメントをパージする方法」をご参照ください。
自己管理型シャードクラスター — 接続タイプ:パブリック IP、専用回線/VPN Gateway/Smart Gateway、CEN のみがサポートされています。
自己管理型シャードクラスター — MongoDB 8.0+ と oplog を併用:移行タスクで使用されるシャードアカウントには、
directShardOperations権限が必要です。以下のコマンドを実行して権限を付与します。db.adminCommand({ grantRolesToUser: "username", roles: [{ role: "directShardOperations", db: "admin"}]})usernameを実際のシャードアカウント名に置き換えてください。SRV レコード:SRV レコードを使用した MongoDB への接続はサポートされていません。
アクティブなバランサーを備えたシャードクラスター:移行中にバランサーがデータのリバランスを行っている場合、インスタンスのレイテンシが発生する可能性があります。
移行中の操作
完全なデータ移行中は、配列型データの更新を含む、データベースまたはコレクションのスキーマを変更しないでください。
完全移行のみ(増分移行なし)を行う場合、移行中にソースインスタンスへの新規データの書き込みは行わないでください。
シャードクラスターをソースとする場合、移行インスタンスが実行中は、
shardCollection、reshardCollection、unshardCollection、moveCollection、movePrimaryのようなデータ分布を変更するコマンドを実行しないでください。
その他の制限事項
コレクションレベルの移行のみがサポートされています。
admin、config、localデータベースは移行できません。トランザクション情報は保持されません。ソースからのトランザクションは、送信先で個別のレコードに変換されます。
FLOAT 列は 38 桁の精度で移行され、DOUBLE 列は 308 桁の精度で移行されます。DTS はこれらの値を
ROUND(COLUMN,PRECISION)を使用して読み取ります。移行を実行する前に、この精度がビジネス要件を満たすかどうかを確認してください。完全なデータ移行では同時 INSERT 操作が使用されるため、断片化が発生する可能性があります。移行後、送信先テーブルが使用するディスク領域は、ソースコレクションよりも大きくなる場合があります。
DTS は失敗したタスクを 7 日間以内に再開しようと試みます。ビジネストラフィックを送信先に切り替える前に、タスクを終了または解放するか、
revokeコマンドを使用して送信先アカウントの書き込み権限を取り消すことで、自動再開後にソースが送信先データを上書きすることを防止してください。DTS は、最後に移行されたレコードのタイムスタンプと現在時刻を比較してレイテンシを算出します。ソースが長期間更新されていない場合、レイテンシの数値は不正確になる可能性があります。これを更新するには、ソースデータベースに対して更新操作を実行してください。
時系列コレクション(MongoDB 5.0 で導入)の移行はサポートされていません。
タスクが失敗した場合、DTS サポートスタッフは 8 時間以内にそのタスクを復旧しようと試みます。復旧中、タスクが再起動されるか、またはそのパラメーターが調整される場合があります。変更されるのは DTS タスクのパラメーターのみであり、データベースパラメーターは変更されません。調整可能なパラメーターの一覧については、「DTS インスタンスのパラメーターを変更する」をご参照ください。
移行方法の選択
DTS では、2 種類の増分移行方法がサポートされています。ソースの構成に基づいて選択してください。
| 条件 | 推奨される方法 |
|---|---|
| ソースで oplog が有効化されている(ApsaraDB for MongoDB のデフォルト) | Oplog — レイテンシが低く、推奨 |
| ソースが Amazon DocumentDB(非エラスティッククラスター)である | ChangeStream — 必須 |
| ソースがシャードクラスターであり、シャードの認証情報を提供したくない場合 | ChangeStream — シャードアカウントおよびパスワードは不要 |
| チェンジストリームが有効化されており、MongoDB 4.0 以降である | ChangeStream |
データの移行
移行プロセスは 7 ステップで構成されています:タスク一覧への移動、タスクの作成、ソースおよび送信先データベースの構成、移行オブジェクトの構成、高度な設定の構成、事前チェックの実行、およびインスタンスの購入です。
ステップ 1:移行タスク一覧へ移動
DTS コンソールまたは DMS コンソールのいずれかを使用します。
DTS コンソールから
Data Transmission Service (DTS) コンソール にログインします。
左側のナビゲーションウィンドウで、データ移行 をクリックします。
ページの左上隅で、移行インスタンスが配置されているリージョンを選択します。
DMS コンソールから
実際の操作は、DMS コンソールのモードおよびレイアウトによって異なる場合があります。詳細については、「シンプルモードのコンソール」および「DMS コンソールのレイアウトとスタイルをカスタマイズする」をご参照ください。
Data Management (DMS) コンソール にログインします。
トップメニューで、Data + AI > Data Transmission (DTS) > データ移行 の順に選択します。
データ移行タスク の右側で、移行インスタンスが配置されているリージョンを選択します。
ステップ 2:タスクの作成
タスクの作成 をクリックして、タスク構成ページを開きます。
ステップ 3:ソースおよび送信先データベースの構成
| カテゴリ | パラメーター | 説明 |
|---|---|---|
| — | タスク名 | DTS が自動的に名前を生成します。識別しやすいように、意味のある名前を指定してください。名前は一意である必要はありません。 |
| ソースデータベース | 既存の接続を選択 | 以前に登録済みのデータベースインスタンスを再利用する場合は、ドロップダウンリストから選択してください。下記のフィールドは自動的に入力されます。DMS コンソールでは、このパラメーターの名称は DMS データベースインスタンスの選択 です。それ以外の場合は、フィールドを手動で入力してください。 |
| データベースタイプ | MongoDB を選択します。 | |
| アクセス方法 | Alibaba Cloud インスタンス を選択します。 | |
| インスタンスリージョン | ソース ApsaraDB for MongoDB インスタンスが配置されているリージョンを選択します。 | |
| Alibaba Cloud アカウント間でのデータ複製 | 同一の Alibaba Cloud アカウント下のインスタンスの場合は、いいえ を選択します。 | |
| アーキテクチャ | 本例では レプリカセット を選択します。 シャードクラスター をソースとする場合は、シャードアカウント および シャードパスワード も指定する必要があります。 | |
| 移行方法 | ソースに基づいて選択します。「移行方法の選択」をご参照ください。Oplog は、ソースの oplog が有効化されている場合に推奨されます。 | |
| インスタンス ID | ソース ApsaraDB for MongoDB インスタンスのインスタンス ID を選択します。 | |
| 認証データベース | ソースアカウントが所属するデータベースを入力します。デフォルト: admin。 | |
| データベースアカウント | ソースデータベースアカウントを入力します。 | |
| データベースパスワード | ソースアカウントのパスワードを入力します。 | |
| 暗号化 | 暗号化なし、SSL 暗号化、または Mongo Atlas SSL を選択します。利用可能なオプションは、アクセス方法 および アーキテクチャ によって異なります。Oplog 移行方法を使用するシャードクラスターをソースとする場合、SSL 暗号化はサポートされていません。 | |
| 送信先データベース | 既存の接続を選択 | ソースと同様に、登録済みのインスタンスを再利用するか、手動で入力します。 |
| データベースタイプ | AnalyticDB for PostgreSQL を選択します。 | |
| アクセス方法 | Alibaba Cloud インスタンス を選択します。 | |
| インスタンスリージョン | 送信先 AnalyticDB for PostgreSQL インスタンスが配置されているリージョンを選択します。 | |
| インスタンス ID | 送信先 AnalyticDB for PostgreSQL インスタンスのインスタンス ID を選択します。 | |
| データベース名 | 送信先データベースの名前を入力します。 | |
| データベースアカウント | 送信先データベースアカウントを入力します。 | |
| データベースパスワード | 送信先アカウントのパスワードを入力します。 |
構成を完了したら、接続テストと続行 をクリックします。
DTS サーバーからのアクセスを許可するために、DTS サービスの IP アドレス範囲がソースデータベースとターゲットデータベースのセキュリティ設定に自動または手動で追加されていることを確認してください。 自己管理データベース ([アクセス方法] が [Alibaba Cloud インスタンス] ではない場合) では、[DTS サーバーの CIDR ブロック] ダイアログで [接続テスト] もクリックしてください。 詳細については、「DTS サーバーの IP アドレスをホワイトリストに追加する」をご参照ください。
ステップ 4:移行オブジェクトの構成
オブジェクトの構成 ページで、以下の設定を行います。
| パラメーター | 説明 |
|---|---|
| 移行タイプ | 一度限りの移行の場合は、完全なデータ移行 を選択します。ダウンタイムをほぼゼロにする移行の場合は、完全なデータ移行 および 増分データ移行 の両方を選択します。増分データ移行 を選択しない場合、移行中にソースへの新規データの書き込みは行わないでください。 |
| 同期対象の DDL および DML 操作 | 増分移行で含める DML 操作を、インスタンスレベルで選択します。コレクションレベルで構成する場合は、選択済みオブジェクト 内の移行対象オブジェクトを右クリックし、ダイアログで操作を選択します。 |
| 競合するテーブルの処理モード | 事前チェックとエラー報告:送信先に同名のコレクションが存在する場合、事前チェックが失敗します。必要に応じて競合するコレクションの名前を変更してください(「オブジェクト名マッピング」をご参照ください)。エラーを無視して続行:チェックをスキップします。 警告 これによりデータの不整合が発生する可能性があります。プライマリキーが一致する既存の送信先レコードは保持され、ソースレコードは移行されません。 |
| ソースオブジェクト | 移行するオブジェクトをクリックし、右向き矢印アイコンをクリックして 選択済みオブジェクト に移動します。選択はコレクションレベルで行います。 |
選択済みオブジェクト で、オブジェクト名マッピングおよびフィールドマッピングを構成します。
データベース名をスキーマにマップ:
選択済みオブジェクト 内のデータベースを右クリックします。

データベース名 を、AnalyticDB for PostgreSQL のターゲットスキーマの名前に変更します。

(任意)同期対象の DDL および DML 操作の選択 で、増分移行の対象となる操作を選択します。

OK をクリックします。
コレクション名をテーブルにマップ:
選択済みオブジェクト 内のコレクションを右クリックします。

テーブル名 を、AnalyticDB for PostgreSQL のターゲットテーブルの名前に変更します。

(任意)フィルター条件を設定します。詳細については、「フィルター条件の設定」をご参照ください。

(任意)同期対象の DDL および DML 操作の選択 で、増分移行の対象となる操作を選択します。

フィールドマッピングの構成:
DTS はコレクションのフィールドを送信先の列に自動的にマップします。 bson_value() 式を確認し、各フィールドについて 列名、型、長さ、および 精度 を構成します。
プライマリキー列に
bson_value("_id")を割り当てます。各
bson_value()式では、最下位のサブフィールドへの完全なパスを指定します。たとえば、ネストされたフィールドの場合はbson_value("person","name")を使用し、bson_value("person")を使用しないでください。部分的なパスを使用すると、子フィールドの増分変更が失われる可能性があります。
正しい式を持つフィールド
既存の bson_value() 式が正しいフィールドの場合:
列名(AnalyticDB for PostgreSQL の送信先列名)を入力します。
型(ソース MongoDB のデータ型との互換性を確保)を選択します。
(任意)長さ および 精度 を構成します。
すべてのフィールドについて繰り返します。
誤った式を持つフィールド
式が誤っているか、存在しないフィールド(たとえばネストされたフィールド)の場合:
操作 列で、既存のエントリを削除するアイコンをクリックします。
+ 列の追加 をクリックします。

列名、型、長さ、および 精度 を構成します。
代入 フィールドに、
bson_value()式を入力します。「フィールドマッピングの例」をご参照ください。すべてのフィールドについて繰り返します。
OK をクリックします。
ステップ 5:高度な設定の構成
次へ:高度な設定 をクリックし、以下の設定を行います。
| パラメーター | 説明 |
|---|---|
| タスクスケジューリング専用クラスター | 専用クラスターデフォルトでは、DTS が共有クラスター上でタスクをスケジュールします。より安定したタスク実行を実現するには、をご購入ください。 |
| 接続失敗時の再試行時間 | デフォルト値:720 分。有効範囲:10~1440 分。30 分を超える値を設定してください。DTS はこの期間内に自動的に接続を再試行します。複数の DTS インスタンスが同一のソースまたは送信先を共有する場合、再試行時間は最も新しく作成されたタスクの設定値が優先されます。再試行期間中も課金対象となります。ソースまたは送信先がリリースされた場合は、速やかに DTS インスタンスもリリースしてください。 |
| その他の問題発生時の再試行時間 | デフォルト値:10 分。有効範囲:1~1440 分。10 分を超える値を設定し、かつ接続失敗時の再試行時間より短い値を指定する必要があります。 |
| 完全移行時の速度制限の有効化 | ソースデータベースへのクエリ毎秒数 (QPS)、完全移行の RPS、および完全移行時のデータ移行速度 (MB/s)を制限することで、データベース負荷を軽減します。完全移行データ移行の速度制限の有効化が選択されている場合のみ利用可能です。タスク開始後にも速度制限の調整が可能です — 詳細については、「」をご参照ください。 |
| 同期対象テーブルのプライマリキー _id は単一のデータの型のみ使用 | コレクション全体でプライマリキー _id が単一のデータの型のみを使用しているかどうかを示します。はい:DTS はプライマリキーのデータの型をスキャンせず、コレクションごとに 1 種類のデータの型のみを移行します。いいえ:DTS はすべてのプライマリキーのデータの型をスキャンし、全データを移行します。選択には十分ご注意ください。誤った選択によりデータ損失が発生する可能性があります。完全移行が選択されている場合のみ利用可能です。 |
| 増分移行時の速度制限の有効化 | 増分移行の RPSおよび増分移行時のデータ移行速度 (MB/s)を制限します。増分移行が選択されている場合のみ利用可能です。 |
| 環境タグ | (任意)インスタンスを環境識別用にタグ付けします。 |
| ETL の設定 | ETL とはデータ移行またはデータ同期タスクにおける ETL の設定抽出・変換・書き出し(ETL)機能を有効化または無効化します。有効化する場合は、コードエディタにデータ処理文を入力します。詳細については、「」および「」をご参照ください。 |
| モニタリングとアラート | アラートのしきい値および通知先連絡先を設定します。移行に失敗した場合、または遅延時間がしきい値を超えた場合、システムからアラートが送信されます。 |
ステップ 6:設定の保存と事前チェックの実行
次へ:タスク設定の保存と事前チェック をクリックします。
この構成の OpenAPI パラメーターを表示するには、次へ:タスク設定の保存と事前チェック ボタンにカーソルを合わせ、OpenAPI パラメーターのプレビュー をクリックします。
DTS はタスク開始前に事前チェックを実行します。事前チェックが失敗した場合:
失敗した項目の横にある 詳細の表示 をクリックし、問題を修正してから 再チェック をクリックします。
無視可能な警告項目については:警告の詳細の確認、無視、OK、および 再チェック の順にクリックします。警告を無視すると、データの不整合が発生する可能性があります。
ステップ 7:インスタンスの購入
成功率 が 100 % になったら、次へ:インスタンスの購入 をクリックします。
購入 ページで、インスタンスを構成します。
パラメーター 説明 リソースグループ設定項目 インスタンスのリソースグループを選択します。デフォルト:デフォルトリソースグループ。詳細については、「Resource Management とは」をご参照ください。 インスタンスクラス 必要な移行速度に基づいてリンク仕様を選択します。より高い仕様ほど、高速な移行をサポートします。詳細については、「データ移行リンク仕様」をご参照ください。 Data Transmission Service(従量課金)利用規約 を読み、同意します。
購入して開始 をクリックします。確認ダイアログで、OK をクリックします。
タスクは データ移行タスク 一覧ページに表示されます。そこで進行状況を監視できます。
完全移行のみのタスクの場合、完全移行が完了するとタスクは自動的に停止します。ステータス は 完了 に変わります。
増分移行を含むタスクの場合、タスクは継続して実行されます。ステータス は手動で停止するまで 実行中 のままです。
フィールドマッピングの例
この例では、bson_value() 式を使用して、MongoDB ドキュメントのフィールドが AnalyticDB for PostgreSQL のテーブル列にどのようにマップされるかを示します。
ソース MongoDB ドキュメント
{
"_id": "62cd344c85c1ea6a2a9f****",
"person": {
"name": "neo",
"age": 26,
"sex": "male"
}
}送信先 AnalyticDB for PostgreSQL のテーブルスキーマ
| 列名 | 型 | 備考 |
|---|---|---|
| mongo_id | varchar | プライマリキー |
| person_name | varchar | |
| person_age | decimal |
移行後の送信先テーブルのデータ
上記のソースドキュメントを基に、移行後の送信先テーブルの内容を以下に示します。
| mongo_id | person_name | person_age |
|---|---|---|
| 62cd344c85c1ea6a2a9f**** | neo | 26 |
この例では、sex は、対応する列が構成されていないため移行されません。
フィールドマッピングの構成
bson_value() 式では、各サブフィールドへの完全なパスを指定します。たとえば、bson_value("person","name") は、name サブフィールドを person にマップします。bson_value("person") のみを使用すると、name、age、sex のような子フィールドに対する増分変更が伝播されません。
| 列名 | 型 | 割り当て |
|---|---|---|
| mongo_id | STRING | bson_value("_id") |
| person_name | STRING | bson_value("person","name") |
| person_age | DECIMAL | bson_value("person","age") |