Kev*_*vin 9 locking optimistic-locking amazon-dynamodb
我正在查看dynamo文档,看起来他们很乐观。我想知道这是否默认使用。从文档中看来,您需要编写Java应用程序才能使用@DynamoDBVersionAttribute批注并获取和设置版本。无需执行此操作,看起来您无需任何锁定即可写入dynamoDB。
那是对的吗?
附带一提,我对没有某种锁定的数据库不太熟悉,因此,如果2个人在DynamoDB中同时写入同一项目而没有任何锁定怎么办?假设我们要写入的项目有4个字段,一个写入会完全失败,还是dynamodb用1个写入更新2/4个字段,而用另外2个写入更新另外2个字段?
F_S*_*O_K 10
你是对的。DynamoDB默认情况下不具有乐观锁定。DynamoDB有各种SDK,据我所知,唯一提供乐观锁定功能的是Java SDK。
这是Java SDK乐观锁定实际支持的功能:
如果您使用其他SDK,这很容易实现。您可以自己创建version属性。您将为putItem方法(以及任何其他必需的保存/更新操作)创建一个包装器。您将使用条件表达式来测试数据库中的版本号是否比保存的版本小1。
为了回答问题的第二部分,两个更新都将成功(假设您对更新没有设置任何条件)。第一个将指定任何更新,第二个将出现并覆盖它们。
Dynamodb 默认不支持乐观锁定。正如您提到的,您需要在 Java 模型类中使用注释才能使用乐观锁定。
如果两个线程写入同一个项目,Dynamodb 项目将具有最后写入的数据(即最后写入数据的线程)。