我正在查看发电机文档,看起来他们很乐观。我想知道这是否默认使用。从文档中,您似乎需要编写java应用程序代码以使用@DynamoDBVersionAttribute批注并获取和设置版本。如果不这样做,看起来你可以在没有任何锁定的情况下写入dynamoDB。
这是对的吗?
另一方面,如果没有某种锁定,我对数据库不太熟悉,那么如果有两个人在没有任何锁定的情况下同时在DynamoDB中写入同一项目会怎么样?假设我们写入的项目有4个字段,一个写入完全失败,或者dynamodb有可能更新2/4字段1个写入,其他2个字段用另一个写入吗?
答案 0 :(得分:7)
你是对的。默认情况下,DynamoDB没有乐观锁定。 DynamoDB有各种SDK,据我所知,唯一提供optimistic locking functionality is the Java SDK的SDK。
这里是Java SDK乐观锁实际支持的内容:
如果您使用的是其他SDK,则自行实现非常简单。您可以自己创建版本属性。您将为putItem方法(以及任何其他所需的保存/更新操作)创建包装器。您可以使用Condition Expression来测试数据库中的版本号是否比您保存的版本少一个。
要回答问题的第二部分,两个更新都会成功(假设您没有为更新添加任何条件)。第一个将指定任何更新,第二个将出现并覆盖它们。
答案 1 :(得分:1)
默认情况下,Dynamodb不支持乐观锁定。如前所述,您需要在Java模型类中使用注释才能使用乐观锁定。
如果两个线程写入同一项,则Dynamodb项将具有最后一个写数据(即写入数据的最后一个线程)。