amazon-dynamodb - 如何保证 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 个吗?
我知道有类似的问题,但我想知道这是否也适用于事务,因为我的条件在另一个对象中。
另外,我的伪代码是最好的方法吗?向其他方式开放
解决方案
您可以为此使用事务。只需将PutItem
请求和UpdateItem
带有条件的请求包含在事务中,两者要么完成,要么都不完成。
事务是提供这种全有或全无行为的方式。
使用事务写入 API,您可以对多个
Put
、Update
、Delete
和ConditionCheck
操作进行分组。然后,您可以将操作作为单个TransactWriteItems
操作提交,该操作可以作为一个单元成功或失败。多个 Get 操作也是如此,您可以将其分组并作为单个TransactGetItems
操作提交。—文档
推荐阅读
- c# - 如何显示与验证表单字段无关的错误?
- string - Fish Shell:验证字符串是否包含子字符串
- c++ - Boost.Hana 测试 lambda 是否可以使用特定参数调用
- bash - Basename 不适用于 xargs 占位符
- python - ValueError:无法分配“'Category'”:“Course.category”必须是“Category”实例
- python - 两次收到相同的cookie,在客户端如何处理?
- python - 具有特定值的 pyspark 前向填充时间戳列(1 秒)
- raspberry-pi - kivy 1.10.1 和 1.11.0 不适用于树莓派 pi4 Buster
- python - 按可变数量的键对嵌套字典进行排序
- python-3.x - 我正在尝试以未知编码在 python 中将 .dat 文件作为 pandas 数据框打开该文件在 Excel 中以所需的格式打开,