首页 > 解决方案 > DynamoDB 是否公开 API 以查询或检测何时合并项目数据发生冲突

问题描述

DynamoDB 是基于原始dynamo 论文的 AP 系统。

标签: amazon-dynamodb

解决方案


你的问题是基于错误的前提。虽然 DynamoDB 的名称,以及一些目标和实现细节,与原始的“Dynamo”论文并不太接近,尤其是数据模型完全不同。

而在 Dynamo 论文中,多个客户端可以同时为一个项目存储多个不同的值 - 以后的读者需要解决冲突 - DynamoDB 做的事情非常不同:

  1. 如果两个客户端替换了一个项目,DynamoDB 会提供“最后一次写入获胜” - 其中一个写入将获胜,您不知道也不关心哪个。
  2. 如果两个客户端同时修改同一个项目的不同属性,这两个更改将被合并。我从未发现这是明确承诺的,但它似乎以这种方式工作。
  3. 您还有一个强大的条件更新功能,它可以根据该项目的旧值的某些条件对单个项目进行修改。这些条件更新保证是隔离的,因此可以用来确保安全的并发修改。例如,条件更新可用于实现所谓的乐观锁定:一个项目在其他属性中具有版本属性,客户端读取旧项目,决定将其更改为什么,然后根据条件进行写入版本仍然没有改变。如果条件失败(因为其他一些客户端与我们竞争),写入失败并且客户端再次尝试整个过程(再次读取,应用更改,然后写回)。
  4. DynamoDB 还具有完整(多项)事务的新功能。Dynamo 中根本不存在此功能。

推荐阅读