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

问题描述

假设我正在使用最终一致的读取模式。在我第一次写入具有值 {“ name”:“ Bob”,“ age”:“ 1”} 的键之后,我的读取碰巧是从副本中返回陈旧数据(旧值 {“ name”:“ Bob”,“ age”:“ 0”} ),然后我进行第二次写入(基于此陈旧的读取),值为 {“ name”:“ Cat” ,“年龄”:“ 0”}

那DynamoDb端会发生什么?

  1. 它拒绝我第二次写信
  2. 它将更新为值{“ name”:“ Cat”,“ age”:“ 0”}
  3. 它将更新为值{“ name”:“ Cat”,“ age”:“ 1”}

如果3号是正确的行为,那么它在幕后如何工作?以及它如何知道我没有故意将年龄设为0?

解决方法

从您的答案来看不是2。默认情况下,DynamoDB最终具有一致的读取,但是写入始终是高度一致的。

工作方式:

  • 您总是得到3个节点,其中1个用于写入,2个用于读取
  • 写时,您发送请求。数据被写入写节点,并同步复制到读节点之一。此时,您会得到答复。
  • 数据在读取节点之间异步复制
  • 进行读取时,您有50%的机会执行高度一致的读取(如果您的目标是具有同步写入功能的节点)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...