Amazon DynamoDB
开发人员指南 (API 版本 2012-08-10)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

全局表:如何使用

以下部分帮助您了解 Amazon DynamoDB 中的全局表的概念和行为。

全局表概念

全局表 是全部由单个 AWS 账户拥有的一个或多个副本表的集合。

副本表 (简称副本) 是作为全局表的一部分运行的单个 DynamoDB 表。每个副本存储相同的一组数据项。任何给定的全局表在每个区域只能有一个副本表。

以下是如何创建全局表的概念性概述。

  1. 在 AWS 区域中创建启用了 DynamoDB 流 的普通 DynamoDB 表。

  2. 对要将您的数据复制到的每个其他 AWS 区域重复步骤 1。

  3. 根据您创建的表定义 DynamoDB 全局表。

AWS 管理控制台 会自动执行这些任务,因此您可以快速轻松地创建全局表。(有关详细说明,请参阅 创建全局表.)

生成的 DynamoDB 全局表包含多个副本表,每个区域一个,DynamoDB 将每个副本表视为单个单元。各个副本具有相同的表名和相同的主键架构。当应用程序将数据写入一个区域中的副本表时,DynamoDB 会自动将写入传播到其他 AWS 区域中的其他副本表中。

重要

Global Tables 会为每个项目自动创建以下属性,以保持您的表数据同步:

  • aws:rep:updatetime

  • aws:rep:updateregion

您不应修改这些属性或使用相同名称创建属性。

您可以将副本表添加到全局表,以便它可在其他 AWS 区域中使用。(为此,全局表必须为空。换句话说,任何副本表中都不能具有任何数据。)

您还可以从全局表中删除副本表。如果您执行此操作,则将完全取消此表与全局表的关联。这一新独立的表不再与全局表交互,并且数据不再传播到全局表或从全局表传播数据。

一致性和冲突解决方法

对任何副本表中的任何项所做的任何更改都将复制到同一全局表中的所有其他副本。在全局表中,新写入的项通常在数秒内即可传播到所有副本表。

使用全局表,各个副本表存储相同的一组数据项。DynamoDB 不支持仅复制一些项的部分复制。

应用程序可以读取数据和将数据写入任何副本表。如果您的应用程序仅使用最终一致性读取,并且仅对一个 AWS 区域发出读取操作,则它无需任何修改即可运行。

但是,如果您的应用程序要求强一致性读取,则它必须在同一区域中执行其所有强一致性读取和写入。DynamoDB 不支持跨 AWS 区域执行强一致性读取;因此,如果您写入一个区域但从其他区域读取,则读取响应可能包括没有反映其他区域中最近完成的写入的结果的陈旧数据。

如果应用程序在不同的区域中几乎同时更新同一项,则可能会出现冲突。为确保最终一致性,DynamoDB 全局表在并行更新之间使用“以最后写入的为准”原则,DynamoDB 会尽最大努力确定最后写入的内容。利用此冲突解决机制,所有副本都同意最新的更新,并趋于一种状态,在该状态中,它们都具有相同的数据。

可用性与持久性

如果单个 AWS 区域变成已隔离或已降级,则您的应用程序可以重定向到其他区域并对其他副本表执行读取和写入操作。您可以应用自定义业务逻辑来确定何时将请求重定向到其他区域。

如果区域变成已隔离或已降级,则 DynamoDB 会跟踪已执行但尚未传播到所有副本表的任何写入操作。当该区域重新在线时,DynamoDB 会继续将该区域的任何待处理写入传播到其他区域中的副本表。它还会继续将其他副本表的写入传播到现在重新在线的区域。