问题描述
假设我正在使用最终一致的读取模式。在我第一次写入具有值 {“ name”:“ Bob”,“ age”:“ 1”} 的键之后,我的读取碰巧是从副本中返回陈旧数据(旧值 {“ name”:“ Bob”,“ age”:“ 0”} ),然后我进行第二次写入(基于此陈旧的读取),值为 {“ name”:“ Cat” ,“年龄”:“ 0”} 。
那DynamoDb端会发生什么?
- 它拒绝我第二次写信
- 它将更新为值{“ name”:“ Cat”,“ age”:“ 0”}
- 它将更新为值{“ name”:“ Cat”,“ age”:“ 1”}
如果3号是正确的行为,那么它在幕后如何工作?以及它如何知道我没有故意将年龄设为0?
解决方法
从您的答案来看不是2。默认情况下,DynamoDB最终具有一致的读取,但是写入始终是高度一致的。
工作方式:
- 您总是得到3个节点,其中1个用于写入,2个用于读取
- 写时,您发送请求。数据被写入写节点,并同步复制到读节点之一。此时,您会得到答复。
- 数据在读取节点之间异步复制
- 进行读取时,您有50%的机会执行高度一致的读取(如果您的目标是具有同步写入功能的节点)