【问题标题】:DynamoDB - Global tables conflict resolutionDynamoDB - 全局表冲突解决
【发布时间】:2023-03-10 05:25:02
【问题描述】:

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

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

例如

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

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

这真的是 DynamoDB 的作用吗?

【问题讨论】:

    标签: amazon-dynamodb


    【解决方案1】:

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

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

    您所描述的是最初发送到单个区域的写入的无序复制,这不是问题,因为复制本身是按顺序发生的。全局表复制使用 DynamoDB Streams,captures a time-ordered sequence of item-level modifications

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

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

    【讨论】:

    • 不清楚。您假设有一个全局单调时钟可以在两个副本之间进行比较.. ddb 真的有这样的时钟吗?
    • @user855 是的,使用 NTP、原子钟和 GPS 接收器...Google 称之为 TrueTime AWS 称之为 Time Sync Service。这是启动全局表的先决条件。见Rise of TrueTime
    • 那么在OP描述的场景中,表格中的最终值会是多少? 0 还是 5?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-01
    相关资源
    最近更新 更多