本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
有关支持哪些版本的亚马逊 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_
)。在这种情况下,该列作为目标文档中的嵌套 JSON 文档(而不是作为字符串字段)而创建。columnName
例如,假设您要从 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_
)。在这种情况下,会将该列 AWS DMS 视为 JSON 数组,并在目标文档中这样创建它。columnName
假设您要从 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\"]"
}
但是,您可以添加转换规则,以将 ContactAddress
和 ContactPhoneNumbers
强制转换为 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) 文件
-
在 https://console.aws.amazon.com/dm AWS DMS
s 上打开控制台。 -
在导航窗格中,选择证书。
-
选择导入证书,然后执行以下操作:
对于 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 弹性集群端点
-
例如,在浏览器中,打开 https://www.amazontrust.com/repository/SFSRootCAG2.pem
并将内容保存到具有 .pem
唯一文件名的文件中。SFSRootCAG2.pem
这是您需要在后续步骤中导入的证书文件。 -
创建弹性集群端点并设置以下选项:
-
在端点配置下,选择添加新 CA 证书。
-
对于证书标识符,输入
SFSRootCAG2.pem
。 -
对于导入证书文件,选择选择文件,然后导航到之前下载的
SFSRootCAG2.pem
文件。 -
选择并打开下载的
SFSRootCAG2.pem
文件。 -
选择导入证书。
-
从 “选择证书” 下拉列表中,选择 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 TABLE 、ALTER TABLE...RENAME 及类似语句) |
重命名集合。 |
TRUNCATE TABLE |
从集合中删除所有文档,但前提是 HandleSourceTableTruncated 为 true 。有关更多信息,请参阅 变更处理DDL处理的任务设置。 |
DROP TABLE |
删除集合,但前提是 HandleSourceTableDropped 为 true 。有关更多信息,请参阅 变更处理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 '{"
JSON 语法。AWS CLIEndpointSetting"
:
"value"
, ...
}'
下表显示了在将 Amazon DocumentDB 作为目标时可以使用的端点设置。
属性名称 | 有效值 | 默认值和描述 |
---|---|---|
|
布尔值
|
在
|
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)。 |