全局表:工作原理
DynamoDB 全局表有两种版本:版本 2019.11.21(当前) 和 版本 2017.11.29。要了解正在使用的版本,请参阅 确定版本。 |
以下部分可帮助您了解 Amazon DynamoDB 中全局表的概念和行为。
全局表概念
全局表是一个或多个副本表的集合,它们都由单个 Amazon 账户所有。
副本表(或副本)是单个 DynamoDB 表,它作为全局表的一部分发挥作用。每个副本都存储相同的数据项目集。对于每个 Amazon 区域,任何给定的全局表只能有一个副本表。有关如何开始使用全局表的更多信息,请参阅 教程:创建全局表。
创建 DynamoDB 全局表时,它包含多个副本表(每个区域一个),DynamoDB 将这些表视为单个单元。每个副本都具有相同的表名和相同的主键架构。当应用程序将数据写入一个区域中的副本表时,DynamoDB 会自动将写操作传播到其他 Amazon 区域的其他副本表。
您可以将副本表添加到全局表中,以便在其他区域中可用。
一致性和冲突解决
对任何副本表中任何项目所做的任何更改都将复制到同一全局表中的所有其他副本。在全局表中,新写入的项目通常会在一秒钟内传播到所有副本表。
对于全局表,每个副本表都存储相同的数据项集。DynamoDB 不支持仅部分项目的部分复制。
应用程序可以读取数据和将数据写入任何副本表。如果您的应用程序只使用最终一致性读取,并且仅针对一个 Amazon 区域,它将无需任何修改工作。但是,如果您的应用程序需要强一致性读取,则必须在同一区域中执行其所有强一致性读取和写入。DynamoDB 不支持跨区域的强一致性读取。因此,如果您写入一个区域并从另一个区域读取,读取响应可能包含过时的数据,这些数据不反映最近在另一个区域中完成的写入的结果。
如果应用程序大约同时更新不同区域中的同一项目,则会出现冲突。为了帮助确保最终的一致性,DynamoDB 全局表使用最后一个写入方为准协调并发更新,其DynamoDB 尽最大努力确定最后一个写入方。使用此冲突解决机制,所有副本都将同意最新的更新,并收敛到它们都具有相同数据的状态。
可用性与持久性
如果单个 Amazon 区域变得孤立或降级,您的应用程序可以重定向到不同的区域,并对其他副本表执行读取和写入操作。您可以应用自定义业务逻辑来确定何时将请求重定向到其他区域。
如果某个区域被隔离或降级,DynamoDB 会跟踪已执行但尚未传播到所有副本表的任何写入操作。当区域恢复联机时,DynamoDB 将继续将任何挂起的写入从该区域传播到其他区域中的副本表。它还会继续将写入从其他副本表传播到现在重新联机的区域。