首页 > 解决方案 > DynamoDB - 全局表冲突解决

问题描述

如果应用程序几乎同时在不同区域更新同一项目,则可能会出现冲突。为确保最终一致性,DynamoDB 全局表在并发更新之间使用“最后写入者获胜”协调,其中 DynamoDB 尽最大努力确定最后写入者。通过这种冲突解决机制,所有副本将就最新更新达成一致,并收敛到它们都具有相同数据的状态。

这就是 AWS 文档所说的。我不明白“最后一位作家获胜”政策如何导致一致的全球数据库?

例如

区域 1 获得写入顺序 T1(设置值为 0) T2(设置值为 5) 区域 2 获得写入顺序 T2(设置值为 5) T1(设置值为 0)

记录在 2 个地方以不同的顺序应用,最终结果不同。区域 1 的值为 5,区域 2 的值为 0。

这真的是 DynamoDB 所做的吗?

标签: amazon-dynamodb

解决方案


我会说“不”。不像你描述的那样。

冲突解决仅适用于以下情况:T1 是直接写入区域 1,随后复制到区域 2...,而 T2 是近并发直接写入区域 2 中的同一项目(不同数据),随后复制到区域1.

您所描述的是最初发送到单个区域的写入的无序复制,这不是问题,因为复制本身是按顺序发生的。全局表复制使用 DynamoDB Streams,它捕获按时间排序的项目级修改序列

如果您的应用程序只写入单个区域,则不会发生这种意义上的冲突,因为任何其他区域将始终看到更新按顺序复制

“最后写入者获胜”意味着当直接写入 R2 的更新 T2 通过复制到达 R1 时,R1 看到 T2 发生的时间晚于 T1,并将其应用到 R1 ......但是当更新 T1 写入直接到 R1,通过复制到达 R2,R2 发现它发生的时间早于 T2 并丢弃它(不在 R2 应用它),因为 T2 是最后发生的写入(及时)。


推荐阅读