如果我在读取过时数据后写入 DynamoDb 数据会怎样?

What happens if i write to DynamoDb data after a stale read?

假设我正在使用最终一致的读取模式。在我第一次写入值为 {"name":"Bob", "age":"1"} 的键后,我的读取恰好是 return 来自副本(旧值 {"name":"Bob", "age":"0"}),然后我用值 {"姓名":"猫", "年龄":"0"}.

那么在 DynamoDb 端会发生什么?

  1. 它拒绝了我的第二次写入
  2. 它更新为值 {"name":"Cat", "age":"0"}
  3. 它更新为值 {"name":"Cat", "age":"1"}

如果第 3 项是正确的行为,那么它在幕后是如何运作的?它怎么知道我不是故意把年龄设为 0 的?

根据您的回答,它是第 2 位。默认情况下,DynamoDB 具有最终一致性读取,但写入始终是强一致性。

它的工作方式:

  • 您始终获得 3 个节点,1 个用于写入,2 个用于读取
  • 写入时,您发送请求。数据写入写入节点并同步复制到其中一个读取节点。此时你会得到响应。
  • 读节点间数据异步复制
  • 当您进行读取时,您有 50% 的机会执行强一致性读取(如果您的目标是具有同步写入的节点)