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?
是的,它试图插入相同数据的第二个线程将抛出ConditionalCheckFailedException
。
com.amazonaws.services.dynamodbv2.model.ConditionalCheckFailedException
一旦项目被保存在数据库中,在后续的更新应该有对DynamoDB表(即服务器端值)值的版本匹配。
保存 - 对于一个新项目时,DynamoDBMapper分配一个初始版本号1.如果您检索项目,更新其属性中的一个或多个并试图保存更改,保存操作成功,只有在客户端的版本号和服务器端的匹配。 该DynamoDBMapper自动递增的版本号。
我们在过去,但在我们的例子中也有类似的用例,多线程从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