全局表常见问题 - AWS 规范性指导

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

全局表常见问题

本节提供了有关 DynamoDB 全局表的常见问题解答。

全局表的定价是多少?

  • 传统 DynamoDB 表中的写入操作按预配置表的写入容量单位 WCUs () 或按需表的写入请求单位 WRUs () 定价。如果您写入一个 5KB 项目,则会产生 5 个单位的费用。对全局表的写入按已置备表的复制写入容量单位 (rWCUs) 或按需表的复制写入请求单位 (rWRUs) 定价。r WCUs 和 r WRUs 的定价与和相同 WCUs 。 WRUs

  • 在每个直接写入项目或通过复制写入项目的地区,都会产生 rwCu 和 rwRU 费用。

  • 跨区域数据传输费用适用。

  • 写入全局二级索引(GSI)被视为本地写入操作,使用常规写入单位。

  • 目前没有可用于 r WCUs 或 r WRUs 的预留容量。对于 GSIs 消耗写入单位的表,购买预留容量 WCUs 可能仍有好处。

  • 当您将新区域添加到全局表时,DynamoDB 会自动引导新区域,并根据表的大小(GB)向您收取费用,就像表还原一样。还会收取跨区域数据传输费用。

全局表支持哪些区域?

全局表(当前版本,2019 版)支持所有 AWS 区域 MREC 表和 MRSC 表的以下区域集:

  • 美国区域集:美国东部(弗吉尼亚州北部)、美国东部(俄亥俄州)、美国西部(俄勒冈州)

  • 欧洲区域集:欧洲地区(爱尔兰)、欧洲地区(伦敦)、欧洲地区(巴黎)、欧洲地区(法兰克福)

  • AP 区域集:亚太地区(东京)、亚太地区(首尔)和亚太地区(大阪)

全局表是如何 GSIs 处理的?

在全局表(当前,版本 2019)中,当您在一个区域中创建 GSI 时,它会在其他参与区域中自动创建并自动回填。

如何停止复制全局表?

  • 您可以像删除任何其他表一样删除副本表。删除全局表将停止复制到该区域,并删除保留在该区域中的表副本。但是,不能在将表的副本保留为独立实体时停止复制,也不能暂停复制。

  • MRSC 表必须恰好部署在三个区域。要删除副本,必须删除所有副本和见证人,以便 MRSC 表成为本地表。

Amazon DynamoDB 直播如何与全局表交互?

  • 每个全局表都基于其所有写入操作生成一个独立的流,而无论这些写入是从何处开始的。您可以选择在一个区域或在所有区域中(独立)使用 DynamoDB 流。如果您想要处理本地而不是复制的写入操作,则可以向每个项目添加您自己的区域属性,以确定写入区域。然后,您可以使用 AWS Lambda 事件过滤器仅对本地区域中的写入操作调用 Lambda 函数。这有助于执行插入和更新操作,但不能执行删除操作。

  • 为多区域最终一致性配置的全局表(MREC 表)通过从副本表上的 Dynamo DB 流中读取这些更改并将该更改应用于所有其他副本表来复制更改。因此,默认情况下,DynamoDB Streams 在 MREC 全局表中的所有副本上都处于启用状态,并且无法在这些副本上禁用。MREC 复制过程可以在短时间内将多个更改合并到一个复制的写入操作中。因此,每个副本的流中可能包含略有不同的记录。MREC 副本上的 DynamoDB Streams 记录始终按项目排序,但副本之间项目之间的顺序可能有所不同。

  • 为多区域强一致性配置的全局表(MRSC 表)不使用 DynamoDB Streams 进行复制,因此默认情况下不会在 MRSC 副本上启用此功能。您可以在 MRSC 副本上启用 DynamoDB Streams。MRSC 副本上的 DynamoDB Streams 记录对于每个副本都是相同的,并且始终按项目排序,但是副本之间项目之间的顺序可能有所不同。

全局表如何处理事务?

  • 对 MRSC 表的事务操作会生成错误。

  • MREC 表上的事务操作在最初发生写入操作的区域内提供原子性、一致性、隔离性、持久性 (ACID) 保证。全局表中不支持跨区域的事务。例如,如果您有一个 MREC 全球表,其中包含美国东部(俄亥俄州)和美国西部(俄勒冈)地区的副本,并在美国东部(俄亥俄州)区域执行TransactWriteItems操作,则在复制更改时,您可能会观察到美国西部(俄勒冈)区域已部分完成的交易。更改仅在源区域中提交后才复制到其他区域。

全局表如何与 DynamoDB Accelerator(DAX)缓存交互?

全局表通过直接更新 DynamoDB 绕过 DAX,因此 DAX 并不知道它保存的是陈旧数据。DAX 缓存只有在缓存的 TTL 过期时才会刷新。

表上的标签会传播吗?

不,标签不会自动传播。

我应该备份所有区域中的表,还是只备份一个区域中的表?

答案取决于备份的目的。

  • 如果您想确保数据的耐久性,DynamoDB 已经提供了这种保护措施。该服务可确保耐久性。

  • 如果您想保留历史记录的快照(例如,为了符合法规要求),备份一个区域中的表就应该足够了。您可以使用 AWS Backup 将备份复制到其他区域。

  • 如果您想恢复错误删除或修改的数据,请在一个区域中使用 Dynamo DB point-in-time 恢复 (PITR)。

如何使用部署全局表 AWS CloudFormation?

  • CloudFormation 将 DynamoDB 表和全局表表示为两个独立的资源:和。AWS::DynamoDB::Table AWS::DynamoDB::GlobalTable一种方法是使用 GlobalTable 构造来创建所有可能为全局的表,最初将其保留为独立的表,然后在以后需要时再添加区域。

  • 在中 CloudFormation,无论副本数量多少,每个全局表都由单个区域中的单个堆栈控制。部署模板时,作为单个堆栈操作的一部分, CloudFormation 创建和更新所有副本。您不应在多个区域中部署相同的 AWS::DynamoDB::GlobalTable 资源。这样做会导致错误,不受支持。如果在多个区域中部署应用程序模板,则可以使用条件在单个区域中创建 AWS::DynamoDB::GlobalTable 资源。或者,您可以选择在独立于应用程序堆栈的堆栈中定义 AWS::DynamoDB::GlobalTable 资源,并确保仅将该资源部署到单个区域。

  • 如果您有一个常规表,并且想要将其转换为全局表,同时由 CloudFormation以下人员管理:将删除策略设置为Retain,从堆栈中移除表,在控制台中将该表转换为全局表,然后将全局表作为新资源导入堆栈。有关更多信息,请参阅 AWS GitHub 存储库 amazon-dynamodb-table-to-global-table-cdk

  • 目前不支持跨账户复制。