使用 Amazon DocumentDB 作為 AWS Database Migration Service 的目標 - AWS Database Migration Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 Amazon DocumentDB 作為 AWS Database Migration Service 的目標

如需 AWS DMS 支援的 Amazon DocumentDB (with MongoDB compatibility) 版本的相關資訊,請參閱 目標: AWS DMS。您可以從 AWS DMS 支援的任何來源資料引擎,使用 AWS DMS 將資料遷移到 Amazon DocumentDB (with MongoDB compatibility)。來源引擎可以在 AWS 受管服務中,例如 Amazon RDS、Aurora 或 Amazon S3。或者,引擎可以在自我管理資料庫中,例如在 Amazon EC2 或內部部署上執行的 MongoDB。

您可以使用 AWS DMS,將來源資料複製到 Amazon DocumentDB 資料庫、集合或文件。

注意

如果來源端點是 MongoDB 或 Amazon DocumentDB,請以文件模式執行遷移。

MongoDB 會以二進位 JSON 格式 (BSON) 存放資料。AWS DMS 支援所有受 Amazon DocumentDB 支援的 BSON 資料類型。如需這些資料類型的清單,請參閱《Amazon DocumentDB 開發人員指南》支援的 MongoDB API、操作和資料類型

如果來源端點是關聯式資料庫,AWS DMS 會如下所示,將資料庫物件對應到 Amazon DocumentDB:

  • 關聯式資料庫或資料庫結構描述,會對應到 Amazon DocumentDB 資料庫

  • 關聯式資料庫中的資料表會對應至 Amazon DocumentDB 中的集合

  • 關聯式資料表中的記錄會對應至 Amazon DocumentDB 中的文件。每個文件是從來源記錄中的資料建構而來。

如果來源端點是 Amazon S3,則產生的 Amazon DocumentDB 物件會對應到 Amazon S3 的 AWS DMS 對應規則。例如,請參閱下列 URI。

s3://mybucket/hr/employee

在這種情況下,AWS DMS 會將 mybucket 中的物件對應到 Amazon DocumentDB,如下所示:

  • 最上層 URI 部分 (hr) 會對應到 Amazon DocumentDB 資料庫。

  • 下一個 URI 部分 (employee) 會對應到 Amazon DocumentDB 集合。

  • employee 中的每個物件會對應到 Amazon DocumentDB 中的文件。

如需 Amazon S3 對應規則的詳細資訊,請參閱使用 Amazon S3 作為來源 AWS DMS

Amazon DocumentDB 端點設定

在 AWS DMS 3.5.0 版及更高版本中,您可以透過調整平行執行緒和批次操作的任務設定,改善 Amazon DocumentDB 端點的變更資料擷取 (CDC) 效能。若要執行此操作,您可以指定並行執行緒數目、每個執行緒的佇列數,以及使用 ParallelApply* 任務設定存放在緩衝區中的記錄數目。例如,假設您要執行 CDC 載入並平行套用 128 個執行緒。您也想要每個執行緒存取 64 個佇列,且每個緩衝區存放 50 筆記錄。

為提升 CDC 效能,AWS DMS 支援下列任務設定:

  • ParallelApplyThreads:指定 CDC 載入期間 AWS DMS 用來將資料記錄推送至 Amazon DocumentDB 目標端點的並行執行緒數目。預設值為零 (0),最大值為 32。

  • ParallelApplyBufferSize:指定每個緩衝區佇列中存放的最大記錄數目,以便並行執行緒在 CDC 載入期間推送至 Amazon DocumentDB 目標端點。預設值為 100,最大值為 1,000。ParallelApplyThreads 指定多個執行緒時,請使用此選項。

  • ParallelApplyQueuesPerThread:指定每個執行緒存取的佇列數目,以便從佇列中取出資料記錄,並在 CDC 期間產生 Amazon DocumentDB 端點的批次載入。預設為 1。最多 512 個。

如需使用 Amazon DocumentDB 作為 AWS DMS 目標的其他詳細資訊,請參閱以下各節:

注意

如需遷移程序的逐步解說,請參閱 AWS Database Migration Service 逐步遷移指南中的從 MongoDB 遷移至 Amazon DocumentDB

將資料從來源對應到 Amazon DocumentDB 目標

AWS DMS 會從來源端點讀取記錄,並根據所讀取資料建構 JSON 文件。對於每個 JSON 文件,AWS DMS 必須決定是否將 _id 欄位做為唯一識別符。接著會使用 _id 欄位作為主索引鍵,將 JSON 文件寫入 Amazon DocumentDB 集合。

單一資料行的來源資料

如果來源資料包含單一欄,則資料必須是字串類型。(根據來源引擎,實際的資料類型可能是 VARCHAR、NVARCHAR、TEXT、LOB、CLOB 或相似類型。) AWS DMS 假設資料是有效的 JSON 文件,並將資料依原狀複寫到 Amazon DocumentDB。

如果產生的 JSON 文件包含名為 _id 的欄位,則該欄位會用作 Amazon DocumentDB 中的唯一 _id

如果 JSON 不包含 _id 欄位,則 Amazon DocumentDB 會自動產生 _id 值。

多個資料行的來源資料

如果來源資料包含多個欄,則 AWS DMS 會從所有這些欄建構 JSON 文件。若要判斷文件的 _id 欄位,AWS DMS 的繼續方式如下:

  • 如果其中一欄名為 _id,則該欄中的資料會用做為目標 _id

  • 如果沒有 _id 欄,但來源資料擁有主索引鍵或唯一索引,則 AWS DMS 會使用該索引鍵或索引值做為 _id 值。主索引鍵或唯一索引的資料也會顯示為 JSON 文件中的明確欄位。

  • 如果沒有 _id 資料欄,也沒有主索引鍵或唯一索引,則 Amazon DocumentDB 會自動產生 _id 值。

在目標端點上強制轉換資料類型

寫入 Amazon DocumentDB 目標端點時,AWS DMS 可以修改資料結構。您可以藉由在來源端點重新命名欄和資料表,或在執行任務時提供套用的轉換規則,來請求這些變更。

用巢狀 JSON 文件 (json_ prefix)

若要強制轉換資料類型,您可以透過手動方式或使用轉換,將 json_ 加到來源欄名稱的字首 (也就是 json_columnName)。在這種情況下,該欄會建立為目標文件內的巢狀 JSON 文件,而非字串欄位。

例如,假設您希望從 MongoDB 來源端點遷移下列文件。

{ "_id": "1", "FirstName": "John", "LastName": "Doe", "ContactDetails": "{"Home": {"Address": "Boston","Phone": "1111111"},"Work": { "Address": "Boston", "Phone": "2222222222"}}" }

如果您不強制轉換任何來源資料類型,會以字串的形式將內嵌的 ContactDetails 文件加以遷移。

{ "_id": "1", "FirstName": "John", "LastName": "Doe", "ContactDetails": "{\"Home\": {\"Address\": \"Boston\",\"Phone\": \"1111111\"},\"Work\": { \"Address\": \"Boston\", \"Phone\": \"2222222222\"}}" }

不過,您可以新增轉換規則,以強制轉換 ContactDetails 為 JSON 物件。例如,假設原始的來源欄名稱為 ContactDetails。若要將資料類型強制設定為巢狀 JSON,必須將來源端點的資料欄重新命名為 json_ContactDetails”,方法是手動或透過轉換規則在來源上新增 “*json_*“ 前綴。例如,您可以使用下面的轉換規則:

{ "rules": [ { "rule-type": "transformation", "rule-id": "1", "rule-name": "1", "rule-target": "column", "object-locator": { "schema-name": "%", "table-name": "%", "column-name": "ContactDetails" }, "rule-action": "rename", "value": "json_ContactDetails", "old-value": null } ] }

AWS DMS 將 ContactDetails 欄位複寫為巢狀 JSON,如下所示。

{ "_id": "1", "FirstName": "John", "LastName": "Doe", "ContactDetails": { "Home": { "Address": "Boston", "Phone": "1111111111" }, "Work": { "Address": "Boston", "Phone": "2222222222" } } }

使用 JSON 陣列 (array_ prefix)

若要強制轉換資料類型,您可以透過手動方式或使用轉換,將 array_ 加到欄名稱的字首 (也就是 array_columnName)。在這種情況下,AWS DMS 會將欄做為 JSON 陣列,並在目標文件中建立它。

假設您希望從 MongoDB 來源端點遷移下列文件。

{ "_id" : "1", "FirstName": "John", "LastName": "Doe",
 "ContactAddresses": ["Boston", "New York"],
 "ContactPhoneNumbers": ["1111111111", "2222222222"] }

如果您不強制轉換任何來源資料類型,會以字串的形式將內嵌的 ContactDetails 文件加以遷移。

{ "_id": "1", "FirstName": "John", "LastName": "Doe",
 "ContactAddresses": "[\"Boston\", \"New York\"]",
 "ContactPhoneNumbers": "[\"1111111111\", \"2222222222\"]"
 }

不過,您可以新增轉換規則,以將 ContactAddressContactPhoneNumbers 強制轉換為 JSON 陣列,如下表所示。

原始的來源資料行名稱 重新命名的來源資料行
ContactAddress array_ContactAddress
ContactPhoneNumbers array_ContactPhoneNumbers

AWS DMS 會複製 ContactAddressContactPhoneNumbers,如下所示。

{ "_id": "1", "FirstName": "John", "LastName": "Doe", "ContactAddresses": [ "Boston", "New York" ], "ContactPhoneNumbers": [ "1111111111", "2222222222" ] }

使用 TLS 連接到 Amazon DocumentDB

依預設,新建立的 Amazon DocumentDB 叢集僅接受使用 Transport Layer Security (TLS) 的安全連線。啟用 TLS 時,每個 Amazon DocumentDB 連線都需要公有金鑰。

您可以從 AWS 託管的 Amazon S3 儲存貯體下載檔案 rds-combined-ca-bundle.pem,以擷取 Amazon DocumentDB 適用的公有金鑰。如需有關下載此檔案的詳細資訊,請參閱《Amazon DocumentDB 開發人員指南》中的使用 TLS 加密連線

下載這個 .pem 檔案之後,您可以依照下面所述步驟,將其中所含的公開金鑰匯入 AWS DMS。

AWS Management Console

匯入公有金鑰 (.pem) 檔案
  1. 若要開啟 AWS DMS 主控台,請前往 https://console.aws.amazon.com/dms

  2. 在導覽窗格中,選擇 Certificates (憑證)

  3. 選擇 Import certificate (匯入憑證) 並執行下列作業:

    • 針對 Certificate identifier (憑證 ID),輸入憑證的唯一名稱,例如 docdb-cert

    • 針對 Import file (匯入檔案),導覽至 .pem 檔案的儲存位置。

    當您滿意設定後,選擇 Add new CA certificate (新增 CA 憑證)

AWS CLI

使用 aws dms import-certificate 命令,如下列範例所示。

aws dms import-certificate \ --certificate-identifier docdb-cert \ --certificate-pem file://./rds-combined-ca-bundle.pem

當您建立 AWS DMS 目標端點,請提供憑證 ID (例如 docdb-cert)。另外,將 SSL 模式參數設為 verify-full

連線到 Amazon DocumentDB 彈性叢集作為目標

在 AWS DMS 3.4.7 及更高版本中,您可以將 Amazon DocumentDB 目標端點建立為彈性叢集。如果您將目標端點建立為彈性叢集,則需要將新的 SSL 憑證連接到 Amazon DocumentDB 彈性叢集端點,因為現有的 SSL 憑證無法運作。

將新的 SSL 憑證連接到 Amazon DocumentDB 彈性叢集端點
  1. 例如,在瀏覽器中開啟 https://www.amazontrust.com/repository/SFSRootCAG2.pem,並將內容儲存到具有唯一檔案名稱的 .pem 檔案中,例如 SFSRootCAG2.pem。這是您在後續步驟中需要匯入的憑證檔案。

  2. 建立 Elastic Clusters 端點並設定下列選項:

    1. 端點組態下,選擇新增 CA 憑證

    2. 然後,對於憑證識別符,輸入 SFSRootCAG2.pem

    3. 對於匯入憑證檔案,選擇選擇檔案,然後瀏覽至您先前下載的 SFSRootCAG2.pem 檔案。

    4. 選取檔案,然後開啟已下載的 SFSRootCAG2.pem 檔案。

    5. 選擇 Import certificate (匯入憑證)

    6. 選擇憑證下拉式清單中,選擇 SFSRootCAG2.pem

下載 SFSRootCAG2.pem 檔案中的新 SSL 憑證現在會連接至 Amazon DocumentDB 彈性叢集端點。

以 Amazon DocumentDB 作為目標的持續複寫

如果針對作為目標 Amazon DocumentDB 啟用持續複寫 (變更資料擷取,CDC),則 AWS DMS 3.5.0 版及更高版本的效能提升是舊版的二十倍。在先前的版本中,AWS DMS 每秒最多可處理 250 筆記錄,而 AWS DMS 現在每秒可處理約 5000 筆記錄。AWS DMS 也可確保 Amazon DocumentDB 中的文件與來源保持同步。建立或更新來源記錄時,AWS DMS 必須先執行以下動作,來判斷哪些 Amazon DocumentDB 記錄受到影響:

  • 如果來源記錄的資料欄名為 _id,該資料欄的值可決定 Amazon DocumentDB 集合中對應的 _id

  • 如果沒有 _id 資料欄,但來源資料擁有主索引鍵或唯一索引,則 AWS DMS 會使用該索引鍵或索引值作為 Amazon DocumentDB 集合的 _id

  • 如果來源記錄沒有 _id 資料欄、主索引鍵或唯一索引,則 AWS DMS 會將所有來源資料欄配對到 Amazon DocumentDB 集合中對應的欄位。

當新的來源記錄建立完成後,AWS DMS 會將對應的文件寫入 Amazon DocumentDB。如果更新現有的來源記錄,AWS DMS 會更新 Amazon DocumentDB 中目標文件內對應的欄位。存在於目標文件,但不在來源記錄中的任何欄位,會保持不變。

刪除來源記錄後,AWS DMS 會從 Amazon DocumentDB 將對應的文件刪除。

來源的結構變更 (DDL)

使用持續複寫時,對來源資料結構 (如資料表、資料欄等) 的任何變更會傳播到 Amazon DocumentDB 中的對應部分。在關聯式資料庫中,會使用資料定義語言 (DDL) 陳述式來初始化這些變更。您可以在下表中查看 AWS DMS 如何將這些變更傳播到 Amazon DocumentDB。

來源的 DDL 在 Amazon DocumentDB 目標的影響
CREATE TABLE 建立空集合。
重新命名資料表 (RENAME TABLEALTER TABLE...RENAME 等) 的陳述式 重新命名集合。
TRUNCATE TABLE 只有 HandleSourceTableTruncatedtrue 時,才會從集合中移除所有文件。如需更多詳細資訊,請參閱 變更DDL處理處理的工作設定
DROP TABLE 只有 HandleSourceTableDroppedtrue 時,才會刪除集合。如需更多詳細資訊,請參閱 變更DDL處理處理的工作設定
將欄新增到資料表 (ALTER TABLE...ADD 等) 的陳述式 DDL 陳述式被忽略,並發出警告。當第一個 INSERT 在來源中執行,新欄位會新增到目標文件。
ALTER TABLE...RENAME COLUMN DDL 陳述式被忽略,並發出警告。當第一個 INSERT 在來源中執行,新命名的欄位會新增到目標文件。
ALTER TABLE...DROP COLUMN DDL 陳述式被忽略,並發出警告。
變更欄資料類型 (ALTER COLUMN...MODIFY 等) 的陳述式 DDL 陳述式被忽略,並發出警告。當第一個 INSERT 與新的資料類型在來源中執行時,會使用該新資料類型的欄位來建立目標文件。

使用 Amazon DocumentDB 作為目標的限制

使用 Amazon DocumentDB 作為 AWS DMS 目標時,有下列限制:

  • 在 Amazon DocumentDB 中,集合名稱不能包含金錢符號 ($)。此外,資料庫名稱不能包含任何 Unicode 字元。

  • AWS DMS 不支援將多個來源資料表合併成單一 Amazon DocumentDB 集合。

  • 當 AWS DMS 程序從不含主索引鍵的來源資料表變更,則該資料表中的任何 LOB 欄會被忽略。

  • 如果 Change table (變更資料表) 選項已啟用,且 AWS DMS 遇到名為「_id」的來源欄,該欄會在變更資料表中顯示為「__id」(兩個底線)。

  • 如果您選擇 Oracle 做為來源端點,則 Oracle 來源必須啟用完整的補充記錄。否則,如果來源中有未變更的資料欄,則資料會載入 Amazon DocumentDB 作為 Null 值。

  • 不支援將複寫任務設定 TargetTablePrepMode:TRUNCATE_BEFORE_LOAD 與 DocumentDB 目標端點搭配使用。

將端點設定與作為目標的 Amazon DocumentDB 搭配使用

您可以使用端點設定來設定 Amazon DocumentDB 目標資料庫,類似於使用額外的連線屬性。您可以在使用 AWS DMS 主控台建立目標端點時指定設定,或使用 AWS CLI 中的 create-endpoint 命令,以 --doc-db-settings '{"EndpointSetting": "value", ...}' JSON 語法指定設定。

下列資料表顯示您可以在將 Amazon DocumentDB 作為目標搭配使用的端點設定。

屬性名稱 有效值 預設值和描述

replicateShardCollections

布林值

true

false

true 時,此端點設定會產生下列影響,並會施加下列限制:

  • AWS DMS 允許將資料複寫到目標碎片集合。只有在目標 DocumentDB 端點是彈性叢集時,此設定才適用。

  • 您必須將 TargetTablePrepMode 設為 DO_NOTHING

  • AWS DMS 會在遷移期間自動將 useUpdateLookup 設為 false

Amazon DocumentDB 的目標資料類型

在下表中,您可找到在使用 AWS DMS 和來自 AWS DMS 資料類型的預設映射時,受支援的 Amazon DocumentDB 目標資料類型。如需 AWS DMS 資料類型的詳細資訊,請參閱 AWS Database Migration Service 的資料類型

AWS DMS 資料類型

Amazon DocumentDB 資料類型

BOOLEAN

布林值

BYTES

二進位資料

DATE

Date

TIME

字串 (UTF8)

DATETIME

Date

INT1

32 位元整數

INT2

32 位元整數

INT4

32 位元整數

INT8

64 位元整數

NUMERIC

字串 (UTF8)

REAL4

Double

REAL8

Double

STRING

如果資料被視為 JSON,則 AWS DMS 會將其遷移到 Amazon DocumentDB 作為文件。否則,資料會映射到字串 (UTF8)。

UINT1

32 位元整數

UINT2

32 位元整數

UINT4

64 位元整數

UINT8

字串 (UTF8)

WSTRING

如果資料被視為 JSON,則 AWS DMS 會將其遷移到 Amazon DocumentDB 作為文件。否則,資料會映射到字串 (UTF8)。

BLOB

:二進位

CLOB

如果資料被視為 JSON,則 AWS DMS 會將其遷移到 Amazon DocumentDB 作為文件。否則,資料會映射到字串 (UTF8)。

NCLOB

如果資料被視為 JSON,則 AWS DMS 會將其遷移到 Amazon DocumentDB 作為文件。否則,資料會映射到字串 (UTF8)。