DynamoDB默认是否锁定?

时间:2018-01-11 02:24:44

标签: locking amazon-dynamodb optimistic-locking

我正在查看发电机文档,看起来他们很乐观。我想知道这是否默认使用。从文档中,您似乎需要编写java应用程序代码以使用@DynamoDBVersionAttribute批注并获取和设置版本。如果不这样做,看起来你可以在没有任何锁定的情况下写入dynamoDB。

这是对的吗?

另一方面,如果没有某种锁定,我对数​​据库不太熟悉,那么如果有两个人在没有任何锁定的情况下同时在DynamoDB中写入同一项目会怎么样?假设我们写入的项目有4个字段,一个写入完全失败,或者dynamodb有可能更新2/4字段1个写入,其他2个字段用另一个写入吗?

2 个答案:

答案 0 :(得分:7)

你是对的。默认情况下,DynamoDB没有乐观锁定。 DynamoDB有各种SDK,据我所知,唯一提供optimistic locking functionality is the Java SDK的SDK。

这里是Java SDK乐观锁实际支持的内容:

  • 在表格中创建一个名为version
  • 的属性
  • 您必须在更新之前从数据库加载项目
  • 当您尝试保存项目时,SDK测试客户端项目版本号与表中的版本号匹配,如果匹配,则保存完成并且版本号递增

如果您使用的是其他SDK,则自行实现非常简单。您可以自己创建版本属性。您将为putItem方法(以及任何其他所需的保存/更新操作)创建包装器。您可以使用Condition Expression来测试数据库中的版本号是否比您保存的版本少一个。

要回答问题的第二部分,两个更新都会成功(假设您没有为更新添加任何条件)。第一个将指定任何更新,第二个将出现并覆盖它们。

答案 1 :(得分:1)

默认情况下,Dynamodb不支持乐观锁定。如前所述,您需要在Java模型类中使用注释才能使用乐观锁定。

如果两个线程写入同一项,则Dynamodb项将具有最后一个写数据(即写入数据的最后一个线程)。