全局表:工作方式 - Amazon DynamoDB
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

全局表:工作方式

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

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

全局表概念

全局表是一个或多个副本表的集合,它们都由单个 Amazon 账户所有。

副本表(或副本)是单个 DynamoDB 表,它作为全局表的一部分发挥作用。每个副本都存储相同的数据项目集。任何给定的全局表在每个 Amazon 区域只能有一个副本表。

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

  1. 在 Amazon 区域中启用 DynamoDB Streams 的情况下创建一个普通的 DynamoDB 表。

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

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

这些区域有:Amazon Web Services Management Console 会自动执行这些任务,因此您可以更快、更轻松地创建全局表。有关更多信息,请参阅 创建全局表

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

重要

为使表数据保持同步,全局表会自动为每个项目创建以下属性:

  • aws:rep:deleting

  • aws:rep:updatetime

  • aws:rep:updateregion

请勿修改这些属性或创建具有相同名称的属性。

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

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

警告

请注意,删除副本不是原子过程。为确保行为的一致性和已知状态,您可能需要考虑提前将应用程序写入流量从要删除的副本移开。删除副本后,请等到所有副本区域终端节点显示副本已取消关联,然后再将其作为自己的隔离区域表对其进行任何进一步的写入。

一致性和冲突解决

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

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

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

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

可用性与持久性

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

如果某个区域被隔离或降级,DynamoDB 会跟踪已执行但尚未传播到所有副本表的任何写入操作。当区域恢复联机时,DynamoDB 将继续将任何挂起的写入从该区域传播到其他区域中的副本表。它还会继续将写入从其他副本表传播到现在重新联机的区域。