DynamoDB默认是否锁定?

问题描述 投票:5回答:2

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

那是对的吗?

另外,如果没有某种锁定,我对DBs不太熟悉,那么如果2人在DynamoDB中同时写入同一项目而没有任何锁定会发生什么呢?假设我们写入的项目有4个字段,一个写入完全失败,或者dynamodb可能更新2/4字段1次写入,其他2个字段与另一个写入?

locking amazon-dynamodb optimistic-locking
2个回答
8
投票

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

以下是Java SDK乐观锁实际支持的内容:

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

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

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


1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.