保存操作期间迪纳摩DB乐观锁定行为(Dynamo DB Optimistic Locking Beh

2019-09-29 07:50发布

Scenario: We have a Dynamo DB table supporting Optimistic Locking with Version Number. Two concurrent threads are trying to save two different entries with the same primary key value to that Table.

Question: Will ConditionalCheckFailedException be thrown for the latter save action?

Answer 1:

是的,它试图插入相同数据的第二个线程将抛出ConditionalCheckFailedException

com.amazonaws.services.dynamodbv2.model.ConditionalCheckFailedException

一旦项目被保存在数据库中,在后续的更新应该有对DynamoDB表(即服务器端值)值的版本匹配。

保存 - 对于一个新项目时,DynamoDBMapper分配一个初始版本号1.如果您检索项目,更新其属性中的一个或多个并试图保存更改,保存操作成功,只有在客户端的版本号和服务器端的匹配。 该DynamoDBMapper自动递增的版本号。



Answer 2:

我们在过去,但在我们的例子中也有类似的用例,多线程从dynamoDB一读,然后试图更新的值。

所以最后会出现在由他们阅读的时间版本的变化,他们试图更新文档,如果你不读从DynamoDB然后中间更新将丢失的最新值(这被称为更新丢失问题是指aws-文档获取更多信息)。

我不知道,如果你有这样的使用情况或没有,但如果你有简单的2个线程试图更新的值,然后如果其中一人得到不同的版本,而他们的要求达到DynamoDB那么你会得到ConditionalCheckFailedException例外。

关于这个错误的更多信息可以在这里找到http://grepcode.com/file/repo1.maven.org/maven2/com.michelboudreau/alternator/0.10.0/com/amazonaws/services/dynamodb/model/ConditionalCheckFailedException.java



文章来源: Dynamo DB Optimistic Locking Behavior during Save Action