我正在查看 dynamo 文档,看起来他们很乐观。我想知道这是否默认使用。
从文档来看,您似乎需要对 java 应用程序进行编码才能使用 @DynamoDBVersionAttribute
注释并获取和设置版本。如果不这样做,看起来您可以在没有任何锁定的情况下写入 DynamoDB。
那是正确的吗?
附带说明一下,我对没有某种锁定的数据库不太熟悉,所以如果两个人在 DynamoDB 中同时写入同一个项目而没有任何锁定会发生什么?假设我们要写入的项目有 4 个字段,一个写入是否会完全失败,或者 DynamoDB 是否有可能用 1 个写入更新 2/4 个字段,而用另一个写入更新其他 2 个字段?
最佳答案
你是对的。默认情况下,DynamoDB 没有乐观锁定。 DynamoDB 有各种 SDK,据我所知,只有一个提供 optimistic locking functionality is the Java SDK .
以下是 Java SDK 乐观锁定实际支持的内容:
如果您使用不同的 SDK,这很容易自己实现。您将自己创建版本属性。您将为 putItem 创建一个包装器。方法(以及任何其他所需的保存/更新操作)。您将使用 Condition Expression测试数据库中的版本号是否比您保存的版本号小一。
要回答问题的第二部分,两个更新都会成功(假设您没有对更新设置任何条件)。第一个将进行指定的任何更新,第二个将出现并覆盖它们。
关于locking - DynamoDB 默认有锁定吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48198949/