全局表:如何使用 - Amazon DynamoDB
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

全局表:如何使用

DynamoDB 全局表有两种版本:版本 2019.11.21(当前)版本 2017.11.29。要了解您正在使用的版本,请参阅确定版本

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

全局表概念

全局表 是一个或多个副本表的集合,这些表均归单个 AWS 账户所有。

副本表(或简称为副本)是作为全局表的一部分运行的单个 表。DynamoDB每个副本存储同一组数据项。任何给定的全局表在每个 AWS 区域中只能有一个副本表。有关如何开始使用全局表的更多信息,请参阅教程:创建全局表

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

您可以向全局表添加副本表,使其可在其他区域中使用。

一致性和冲突解决

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

对于全局表,每个副本表存储同一组数据项。DynamoDB 不支持仅部分项目的部分复制。

应用程序可以在任何副本表中读取和写入数据。如果您的应用程序仅使用最终一致性读取,并且仅针对一个 AWS 区域进行读取的问题,则应用程序无需做任何修改即可运行。但是,如果您的应用程序需要强一致性读取,则它必须在同一区域中执行所有强一致性读取和写入。DynamoDB 不支持跨区域的强一致性读取。因此,如果您写入到一个区域并从另一个区域进行读取,则读取响应可能包括过时的数据,这些数据不反映最近在其他区域中完成写入的结果。

如果应用程序同时在不同的区域中更新同一项目,则可能会引发冲突。为了帮助确保最终一致性,DynamoDB 全局表使用最后一个写入器获得 并发更新之间的协调,其中 DynamoDB 会尽最大努力确定最后一个写入器。利用此冲突解决机制,所有副本将就最新更新达成一致并收敛到它们都具有相同数据的状态。

可用性与持久性

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

如果某个区域变得隔离或降级,DynamoDB 将跟踪已执行但尚未传播到所有副本表的任何写入。当区域恢复联机状态时,DynamoDB 继续将该区域的任何待处理写入传播到其他区域中的副本表。它还继续将其他副本表中的写入传播到现在恢复联机的区域。