如果我在读取过时数据后写入 DynamoDb 数据会怎样?
What happens if i write to DynamoDb data after a stale read?
假设我正在使用最终一致的读取模式。在我第一次写入值为 {"name":"Bob", "age":"1"} 的键后,我的读取恰好是 return 来自副本(旧值 {"name":"Bob", "age":"0"}),然后我用值 {"姓名":"猫", "年龄":"0"}.
那么在 DynamoDb 端会发生什么?
- 它拒绝了我的第二次写入
- 它更新为值 {"name":"Cat", "age":"0"}
- 它更新为值 {"name":"Cat", "age":"1"}
如果第 3 项是正确的行为,那么它在幕后是如何运作的?它怎么知道我不是故意把年龄设为 0 的?
根据您的回答,它是第 2 位。默认情况下,DynamoDB 具有最终一致性读取,但写入始终是强一致性。
它的工作方式:
- 您始终获得 3 个节点,1 个用于写入,2 个用于读取
- 写入时,您发送请求。数据写入写入节点并同步复制到其中一个读取节点。此时你会得到响应。
- 读节点间数据异步复制
- 当您进行读取时,您有 50% 的机会执行强一致性读取(如果您的目标是具有同步写入的节点)
假设我正在使用最终一致的读取模式。在我第一次写入值为 {"name":"Bob", "age":"1"} 的键后,我的读取恰好是 return 来自副本(旧值 {"name":"Bob", "age":"0"}),然后我用值 {"姓名":"猫", "年龄":"0"}.
那么在 DynamoDb 端会发生什么?
- 它拒绝了我的第二次写入
- 它更新为值 {"name":"Cat", "age":"0"}
- 它更新为值 {"name":"Cat", "age":"1"}
如果第 3 项是正确的行为,那么它在幕后是如何运作的?它怎么知道我不是故意把年龄设为 0 的?
根据您的回答,它是第 2 位。默认情况下,DynamoDB 具有最终一致性读取,但写入始终是强一致性。
它的工作方式:
- 您始终获得 3 个节点,1 个用于写入,2 个用于读取
- 写入时,您发送请求。数据写入写入节点并同步复制到其中一个读取节点。此时你会得到响应。
- 读节点间数据异步复制
- 当您进行读取时,您有 50% 的机会执行强一致性读取(如果您的目标是具有同步写入的节点)