

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

# 使用与 MongoDB 兼容的数据库作为同构数据迁移的来源 AWS DMS
<a name="dm-data-providers-source-mongodb"></a>

您可以使用与 MongoDB 兼容的数据库作为 AWS DMS中同构数据迁移的源。在此情况下，源数据提供程序可以是本地数据库、Amazon EC2 上的 MongoDB 数据库或 Amazon DocumentDB（兼容 MongoDB）数据库。

有关支持的数据库版本，请参阅[DMS 同构数据迁移的源数据提供程序](CHAP_Introduction.Sources.md#CHAP_Introduction.Sources.HomogeneousDataMigrations)。

以下各节描述了自行管理 MongoDB 数据库和托管的 Amazon DocumentDB 数据库的特定配置先决条件。 AWS

**Topics**
+ [使用自我管理的 MongoDB 数据库作为同构数据迁移的来源 AWS DMS](#dm-data-providers-source-mongodb-sm)
+ [使用 Amazon DocumentDB 数据库作为同构数据迁移的来源 AWS DMS](#dm-data-providers-source-mongodb-aws)
+ [使用与 MongoDB 兼容的数据库作为同构数据迁移的源的特征](#dm-data-providers-source-mongodb-features)
+ [使用与 MongoDB 兼容的数据库作为同构数据迁移的源的限制](#dm-data-providers-source-mongodb-limitations)
+ [使用与 MongoDB 兼容的数据库作为同构数据迁移的源的最佳实践](#dm-data-providers-source-mongodb-bestpractices)

## 使用自我管理的 MongoDB 数据库作为同构数据迁移的来源 AWS DMS
<a name="dm-data-providers-source-mongodb-sm"></a>

本节介绍如何配置本地托管的或在 Amazon EC2 实例上托管的 MongoDB 数据库。

检查源 MongoDB 数据库的版本。请确保它 AWS DMS 支持您的源 MongoDB 数据库版本，如中所述。[DMS 同构数据迁移的源数据提供程序](CHAP_Introduction.Sources.md#CHAP_Introduction.Sources.HomogeneousDataMigrations)

要使用 MongoDB 源运行同构数据迁移，您可以创建具有根权限的用户账户，也可以仅在要迁移的数据库上创建具有权限的用户。有关创建用户的更多信息，请参阅[使用 MongoDB 作为源时所需的权限 AWS DMS](CHAP_Source.MongoDB.md#CHAP_Source.MongoDB.PrerequisitesCDC)。

要将持续复制或 CDC 与 MongoDB 配合使用 AWS DMS ，需要访问 MongoDB 操作日志 (oplog)。有关更多信息，请参阅 [为 CDC 配置 MongoDB 副本集](CHAP_Source.MongoDB.md#CHAP_Source.MongoDB.PrerequisitesCDC.ReplicaSet)。

有关 MongoDB 身份验证方法的信息，请参阅[使用 MongoDB 作为源时的安全要求 AWS DMS](CHAP_Source.MongoDB.md#CHAP_Source.MongoDB.Security)。

将 MongoDB 作为源时，同构数据迁移支持 Amazon DocumentDB 支持的所有数据类型。

将 MongoDB 作为源时，要将用户凭证存储在 Secrets Manager 中，您需要使用**其他类型的密钥**类型以纯文本形式提供这些凭证。有关更多信息，请参阅 [使用密钥访问 AWS Database Migration Service 终端节点](security_iam_secretsmanager.md)。

以下代码示例演示了如何以纯文本形式存储数据库密钥。

```
{
  "username": "dbuser",
  "password": "dbpassword"
}
```

## 使用 Amazon DocumentDB 数据库作为同构数据迁移的来源 AWS DMS
<a name="dm-data-providers-source-mongodb-aws"></a>

本节介绍如何配置 Amazon DocumentDB 数据库实例，以作为同构数据迁移的源。

使用 Amazon DocumentDB 实例的主用户名作为与 MongoDB 兼容的源数据提供程序的用户账户，以在 AWS DMS中进行同构数据迁移。主用户账户具有允许它设置 CDC 所需的角色。如果使用主用户账户之外的账户，该账户必须具有根角色。有关创建用户作为根账户的更多信息，请参阅[设置权限以使用 Amazon DocumentDB 作为源](CHAP_Source.DocumentDB.md#CHAP_Source.DocumentDB.Permissions)。

要开启逻辑复制，请将数据库参数组中的 `change_stream_log_retention_duration` 参数设置为适合事务工作负载的设置。更改此静态参数需要重启数据库实例才能生效。开始对所有任务类型（包括仅完全加载）进行数据迁移之前，请先为给定数据库中的所有集合（或只为选定的集合）启用 Amazon DocumentDB 更改流。有关启用 Amazon DocumentDB 更改流的更多信息，请参阅《Amazon DocumentDB 开发人员指南》**中的[启用更改流](https://docs.aws.amazon.com/documentdb/latest/developerguide/change_streams.html#change_streams-enabling)。

**注意**  
AWS DMS 使用 Amazon DocumentDB 变更流捕获正在进行的复制期间的更改。如果 Amazon DocumentDB 在 DMS 读取记录之前将记录从更改流中清除，则您的任务将失败。建议设置 `change_stream_log_retention_duration` 参数，将更改至少保留 24 小时。

要使用 Amazon DocumentDB 进行同构数据迁移，请将用户凭证存储在 Secrets Manager 中的 **Amazon DocumentDB 数据库的凭证**下。

## 使用与 MongoDB 兼容的数据库作为同构数据迁移的源的特征
<a name="dm-data-providers-source-mongodb-features"></a>
+ 在完全加载阶段，您可以迁移 Amazon DocumentDB 支持的所有二级索引。
+ AWS DMS 并行迁移集合。同构数据迁移根据集合中每个文档的平均大小在运行时计算数据段，以实现最佳性能。
+ DMS 可以复制您在 CDC 阶段创建的二级索引。DMS 在 MongoDB 版本 6.0 中支持此特征。
+ DMS 支持嵌套级别大于 97 的文档。

## 使用与 MongoDB 兼容的数据库作为同构数据迁移的源的限制
<a name="dm-data-providers-source-mongodb-limitations"></a>
+ 文档不能有带 `$` 前缀的字段名称。
+ AWS DMS 不支持时间序列集合迁移。
+ AWS DMS 在 CDC 阶段不支持`create``drop`、或 `rename collection` DDL 事件。
+ AWS DMS 不支持字段集合中不一致的数据类型。`_id`例如，对于 `_id` 字段，以下不支持的集合具有多种数据类型。

  ```
  rs0 [direct: primary] test> db.collection1.aggregate([
  ...   {
  ...     $group: {
  ...       _id: { $type: "$_id" },
  ...       count: { $sum: 1 }
  ...     }
  ...   }
  ... ])
  [ { _id: 'string', count: 6136 }, { _id: 'objectId', count: 848033 } ]
  ```
+ 对于仅限 CDC 的任务， AWS DMS 仅支持`immediate`启动模式。
+ AWS DMS 不支持包含无效 UTF8 字符的文档。
+ AWS DMS 不支持分片集合。

## 使用与 MongoDB 兼容的数据库作为同构数据迁移的源的最佳实践
<a name="dm-data-providers-source-mongodb-bestpractices"></a>
+ 对于托管在同一 MongoDB 实例上的多个大型数据库和集合，建议您对每个数据库和集合使用选择规则，以将任务拆分为多个数据迁移任务和项目。您可以调整数据库和集合分区以获得出色性能。