首页 > 解决方案 > 如何保证 DynamoDB 中的业务规则?

问题描述

我们有一个业务规则,一个帐户在任何给定时间只能拥有 3 个项目。

为了保持效率,我们在“userData”字段中跟踪项目数量,而不是进行 COUNT 查询

考虑 DynamoDB 中已有的以下示例对象:

userData : { createdProjects : 2 }
project1 : { id : 1 }
project2 : { id : 2 }

为了强制执行此规则,我们在创建项目时做了以下操作(伪代码)

in transaction:
  putItem(key = "project3", object = { id : 3 })
  updateItem(
    key = "userData", 
    expression = "createdProjects = createdProjects + 1"
    condition = "createdProjects < 3"
  )

现在,假设用户尝试用两台计算机同时创建一个项目,DynamoDB 会保证他不能创建超过 3 个吗?

我知道有类似的问题,但我想知道这是否也适用于事务,因为我的条件在另一个对象中

另外,我的伪代码是最好的方法吗?向其他方式开放

标签: amazon-dynamodb

解决方案


您可以为此使用事务。只需将PutItem请求和UpdateItem带有条件的请求包含在事务中,两者要么完成,要么都不完成。

事务是提供这种全有或全无行为的方式。

使用事务写入 API,您可以对多个PutUpdateDeleteConditionCheck操作进行分组。然后,您可以将操作作为单个TransactWriteItems操作提交,该操作可以作为一个单元成功或失败。多个 Get 操作也是如此,您可以将其分组并作为单个TransactGetItems操作提交。

文档


推荐阅读