选择您的 Cookie 首选项

我们使用必要 Cookie 和类似工具提供我们的网站和服务。我们使用性能 Cookie 收集匿名统计数据,以便我们可以了解客户如何使用我们的网站并进行改进。必要 Cookie 无法停用,但您可以单击“自定义”或“拒绝”来拒绝性能 Cookie。

如果您同意,AWS 和经批准的第三方还将使用 Cookie 提供有用的网站功能、记住您的首选项并显示相关内容,包括相关广告。要接受或拒绝所有非必要 Cookie,请单击“接受”或“拒绝”。要做出更详细的选择,请单击“自定义”。

使用亚马逊 DocumentDB 作为 AWS 数据库迁移服务的目标

聚焦模式
使用亚马逊 DocumentDB 作为 AWS 数据库迁移服务的目标 - AWS 数据库迁移服务

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

有关支持哪些版本的亚马逊 DocumentDB(兼容 MongoDB)的信息,请参阅。 AWS DMS 的目标 AWS DMS您可以使用 AWS DMS 将数据从 AWS DMS 支持的任一源数据引擎迁移到 Amazon DocumentDB(与 MongoDB 兼容)。源引擎可以位于 AWS 托管服务上,例如 Amazon RDS、Aurora 或 Amazon S3。或者,引擎可以位于自我管理的数据库上,例如在亚马逊或本地运行的 MongoDB。 EC2

您可以使用将源数据复制 AWS DMS 到 Amazon DocumentDB 数据库、馆藏或文档。

注意

如果您的源端点是 MongoDB 或 Amazon DocumentDB,请在文档模式下运行迁移。

MongoDB 以二进制 JSON 格式 (BSON) 存储数据。 AWS DMS 支持 Amazon DocumentDB 支持的所有 BSON 数据类型。有关这些数据类型的列表,请参阅 Amazon DocumentDB 开发者 APIs指南中的支持的 MongoDB 、操作和数据类型。

如果源终端节点是关系数据库,则按如下方式将数据库对象 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到亚马逊文档数据库,如下所示:

  • 顶级 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。

有关使用亚马逊 DocumentDB 作为目标的更多详情 AWS DMS,请参阅以下各节:

注意

有关迁移过程的 step-by-step演练,请参阅迁移指南中的从 MongoDB 迁移到 Amazon DocumentDB。 AWS Database Migration Service Step-by-Step

将数据从源映射到 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_ 前缀)

要强制转换数据类型,可以手动或使用转换的方式在源列名称中加上前缀 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_ 前缀)

要强制转换数据类型,可以手动或使用转换的方式在列名称中加上前缀 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 复制ContactAddress并如下ContactPhoneNumbers所示。

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

使用 TLS 连接到 Amazon DocumentDB

默认情况下,新创建的 Amazon DocumentDB 集群仅接受使用传输层安全性协议(TLS)的安全连接。当 TLS 启用时,每个到 Amazon DocumentDB 的连接都需要公有密钥。

您可以通过从 AWS 托管的 Amazon S3 存储桶下载文件来检索 Amazon DocumentDB 的公钥。rds-combined-ca-bundle.pem有关下载此文件的更多信息,请参阅《Amazon DocumentDB 开发人员指南》中的使用 TLS 加密连接

下载此.pem 文件后,您可以按 AWS DMS 如下所述将其中包含的公钥导入其中。

AWS Management Console

导入公有密钥 (.pem) 文件
  1. https://console.aws.amazon.com/dm AWS DMS s 上打开控制台。

  2. 在导航窗格中,选择证书

  3. 选择导入证书,然后执行以下操作:

    • 对于 Certificate identifier (证书标识符),请输入证书的唯一名称,例如 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. 创建弹性集群端点并设置以下选项:

    1. 端点配置下,选择添加新 CA 证书

    2. 对于证书标识符,输入 SFSRootCAG2.pem

    3. 对于导入证书文件,选择选择文件,然后导航到之前下载的 SFSRootCAG2.pem 文件。

    4. 选择并打开下载的 SFSRootCAG2.pem 文件。

    5. 选择导入证书

    6. “选择证书” 下拉列表中,选择 SFSRootCAG2.pem。

下载的 SFSRootCAG2.pem 文件中的新 SSL 证书现已附加到您的 Amazon DocumentDB 弹性集群端点。

以 Amazon DocumentDB 作为目标的持续复制

如果以 Amazon DocumentDB 为目标启用持续复制(变更数据捕获,CDC),则 AWS DMS 版本 3.5.0 及更高版本提供的性能提升将是之前版本的 20 倍。在之前的版本中,每秒最多可 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 会将相应的文档写入亚马逊文档数据库。如果更新了现有源记录, 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 作为目标的限制

使用亚马逊 DocumentDB 作为目标时,以下限制适用: AWS DMS

  • 在 Amazon DocumentDB 中,集合名称不能包含美元符号($)。此外,数据库名称不能包含任何 Unicode 字符。

  • AWS DMS 不支持将多个源表合并为一个 Amazon DocumentDB 集合。

  • 当 AWS DMS 处理来自没有主键的源表发生变化时,该表中的任何 LOB 列都将被忽略。

  • 如果 Change table (更改表) 选项处于启用状态,并且 AWS DMS 发现名为“_id”的源列,则该列将在更改表中显示为“__id”(两条下划线)。

  • 如果选择 Oracle 作为源终端节点,则 Oracle 源必须启用完整补充日志记录。否则,如果源位置有未更改的列,则数据将作为空值加载到 Amazon DocumentDB。

  • 不支持将复制任务设置 TargetTablePrepMode:TRUNCATE_BEFORE_LOAD 与 DocumentDB 目标端点一起使用。

使用以 Amazon DocumentDB 为目标的端点设置

您可以使用端点设置来配置 Amazon DocumentDB 目标,这与使用额外连接属性类似。您可以在使用 AWS DMS 控制台创建目标端点时指定设置,或者使用中的create-endpoint命令和 --doc-db-settings '{"EndpointSetting": "value", ...}' JSON 语法。AWS CLI

下表显示了在将 Amazon DocumentDB 作为目标时可以使用的端点设置。

属性名称 有效值 默认值和描述

replicateShardCollections

布尔值

true

false

true 时,此端点设置会产生以下效果并施加以下限制:

  • AWS DMS 允许将数据复制到目标分片集合。仅当目标 DocumentDB 端点是弹性集群时,此设置才适用。

  • 必须将 TargetTablePrepMode 设置为 DO_NOTHING

  • AWS DMS false在迁useUpdateLookup移期间自动设置为。

Amazon DocumentDB 的目标数据类型

在下表中,您可以找到使用 AWS DMS 时支持的 Amazon DocumentDB 目标数据类型,以及 DMS 数据类型的默认映射。 AWS 有关 AWS DMS 数据类型的更多信息,请参阅AWS Database Migration Service 的数据类型

AWS DMS 数据类型

Amazon DocumentDB 数据类型

BOOLEAN

布尔值

BYTES

二进制数据

DATE

日期

TIME

字符串 (UTF8)

DATETIME

日期

INT1

32 位整数

INT2

32 位整数

INT4

32 位整数

INT8

64 位整数

NUMERIC

字符串 (UTF8)

REAL4

双精度

REAL8

双精度

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)。
隐私网站条款Cookie 首选项
© 2025, Amazon Web Services, Inc. 或其附属公司。保留所有权利。