DynamoDB 是否公开一个 API 来查询或检测合并项目数据时是否存在冲突

Does DynamoDB expose an API to query or detect when there is conflict in merging item data

DynamoDB是基于原dynamo paper.

的AP系统

你的问题是基于错误的前提。尽管 DynamoDB 与最初的“Dynamo”论文共享名称、一些目标和实现细节,但不是很接近,尤其是数据模型完全不同。

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

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