使用 Amazon DocumentDB 做為 AWS Database Migration Service 的目標 - AWS 資料庫遷移服務

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

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

如需 AWS DMS 支援哪些 Amazon DocumentDB 版本 (與 MongoDB 相容) 的詳細資訊,請參閱 的目標 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 端點設定

在 3.5.0 版和更新 AWS DMS 版本中,您可以透過調整平行執行緒和大量操作的任務設定,來改善 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,請參閱下列章節:

注意

如需遷移程序的step-by-step演練,請參閱 AWS Database Migration Service Step-by-Step遷移指南中的從 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 值。

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

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

用巢狀 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 儲存貯體下載 檔案 ,以擷取 Amazon DocumentDB 的公有金鑰。 rds-combined-ca-bundle.pem Amazon S3 如需下載此檔案的相關資訊,請參閱《Amazon DocumentDB 開發人員指南》中的使用 TLS 加密連線

下載此 .pem 檔案後,您可以匯入其中包含的公有金鑰, AWS DMS 如下所述。

AWS Management Console

匯入公有金鑰 (.pem) 檔案
  1. 在 https://https://console.aws.amazon.com/dms 開啟 AWS 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 目標端點時,請提供憑證識別符 (例如 docdb-cert)。另外,將 SSL 模式參數設為 verify-full

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

在 3.4.7 版和更新 AWS DMS 版本中,您可以將 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 中目標文件中的對應欄位。存在於目標文件,但不在來源記錄中的任何欄位,會保持不變。

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

來源的結構變更 (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 主控台或使用 中的 create-endpoint命令搭配 --doc-db-settings '{"EndpointSetting": "value", ...}' JSON 語法來建立目標端點時AWS CLI,您可以指定設定。

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

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

replicateShardCollections

boolean

true

false

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

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

  • 您必須將 TargetTablePrepMode 設為 DO_NOTHING

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

Amazon DocumentDB 的目標資料類型

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

AWS DMS 資料類型

Amazon DocumentDB 資料類型

BOOLEAN

Boolean

BYTES

二進位資料

DATE

日期

TIME

字串 (UTF8)

DATETIME

日期

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)。