本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
全局表:如何使用
DynamoDB 全局表有两种版本:版本 2019.11.21(当前) 和 版本 2017.11.29。要了解您正在使用的版本,请参阅确定版本。 |
以下部分可帮助您了解 Amazon DynamoDB 中全局表的概念和行为。
全局表概念
全局表 是一个或多个副本表的集合,所有副本表都归单个 AWS 账户所有。
副本表(或简称为副本)是充当全局表的一部分的单个 表。DynamoDB每个副本存储同一组数据项。任何给定的全局表在每个 AWS 区域中只能有一个副本表。
以下是如何创建全局表的概念性概述。
-
在 AWS 区域中创建普通 DynamoDB 表,并启用 DynamoDB 流。
-
对要在其中复制数据的每个其他区域重复步骤 1。
-
根据您创建的表定义一个 DynamoDB 全局表。
自动执行这些任务,因此您可以更快、更轻松地创建全局表。AWS 管理控制台有关更多信息,请参阅创建全局表。
生成的 DynamoDB 全局表由多个副本表组成,每个区域一个,DynamoDB 将其视为单个单元。每个副本具有相同的表名称和相同的主键架构。当应用程序将数据写入一个区域的副本表时,DynamoDB 会自动将写入操作传播到其他 AWS 区域中的其他副本表。
为了使表数据保持同步,全局表会自动为每个项目创建以下属性:
-
aws:rep:deleting
-
aws:rep:updatetime
-
aws:rep:updateregion
请勿修改这些属性或创建同名属性。
您可以向全局表添加副本表,使其可在其他区域中使用。(要执行此操作,全局表必须为空。 换句话说,任何副本表都不能包含任何数据。)
您还可以从全局表中删除副本表。如果执行此操作,表将与全局表完全取消关联。此新独立的表不再与全局表交互,并且数据不再传播到全局表或从中传播。
一致性和冲突解决
对任意副本表中的任何项目所做的任何更改都将复制到同一全局表中的所有其他副本。在全局表中,新写入的项目通常会在几秒钟内传播到所有副本表。
对于全局表,每个副本表存储同一组数据项。DynamoDB 不支持仅部分项目的部分复制。
应用程序可以在任何副本表中读取和写入数据。如果您的应用程序仅使用最终一致性读取,并且仅针对一个 AWS 区域进行读取的问题,则应用程序无需任何修改即可运行。但是,如果您的应用程序需要强一致性读取,则它必须在同一区域中执行所有强一致性读取和写入。DynamoDB 不支持跨区域的强一致性读取。因此,如果您写入一个区域并从另一个区域读取,则读取响应可能包含过时的数据,这些数据不反映最近在其他区域中完成写入的结果。
如果应用程序几乎同时更新不同区域中的同一项目,则可能会出现冲突。为了帮助确保最终一致性,DynamoDB 全局表使用最后一个写入器获得 并发更新之间的协调,其中 DynamoDB 会尽最大努力确定最后一个写入器。利用此冲突解决机制,所有副本将就最新更新达成一致并收敛到它们都具有相同数据的状态。
可用性与持久性
如果单个 AWS 区域变得隔离或降级,您的应用程序可以重定向到其他区域并对其他副本表执行读取和写入操作。您可以应用自定义业务逻辑来确定何时将请求重定向到其他区域。
如果某个区域变得隔离或降级,DynamoDB 会跟踪已执行但尚未传播到所有副本表的任何写入。当区域恢复联机状态时,DynamoDB 会继续将该区域的任何待处理写入传播到其他区域中的副本表。它还继续将其他副本表中的写入传播到现在恢复联机的区域。