locking - DynamoDB 默认有锁定吗?

标签 locking amazon-dynamodb optimistic-locking

我正在查看 dynamo 文档,看起来他们很乐观。我想知道这是否默认使用。

从文档来看,您似乎需要对 java 应用程序进行编码才能使用 @DynamoDBVersionAttribute注释并获取和设置版本。如果不这样做,看起来您可以在没有任何锁定的情况下写入 DynamoDB。

那是正确的吗?

附带说明一下,我对没有某种锁定的数据库不太熟悉,所以如果两个人在 DynamoDB 中同时写入同一个项目而没有任何锁定会发生什么?假设我们要写入的项目有 4 个字段,一个写入是否会完全失败,或者 DynamoDB 是否有可能用 1 个写入更新 2/4 个字段,而用另一个写入更新其他 2 个字段?

最佳答案

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

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

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

  • 如果您使用不同的 SDK,这很容易自己实现。您将自己创建版本属性。您将为 putItem 创建一个包装器。方法(以及任何其他所需的保存/更新操作)。您将使用 Condition Expression测试数据库中的版本号是否比您保存的版本号小一。

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

    关于locking - DynamoDB 默认有锁定吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48198949/

    相关文章:

    amazon-web-services - 使用 "and"运算符使用具有多个条件的 FilterExpression 进行扫描操作

    java - 如何防止 Query.list() 上出现 StaleObjectStateException?

    c# - 锁的范围是什么?

    postgresql - 在 Postgresql 中锁定事务(一系列选择和更新)

    java - AWS Java 客户端不验证 Java 7 上的发电机端点

    java - @Version 为 null 时乐观锁失败

    sql-server - 多表复杂实体的乐观并发

    python - RabbitMQ中如何实现同步生产者调用

    java - 选择更新跳过从 JPA 级别锁定

    amazon-web-services - DynamoDB query() 与 getItem() 基于索引进行单项检索