我正在尝试在DynamoDB中实现某种乐观锁定,其中我根据给定分区键(表使用复合键)存在的记录数插入新记录。
特定上下文是分类帐,其中分类帐中的每个文档都代表存款或取款,并且包含诸如totalBalance
,purchasedItem
(如果为存款则为null),userId
, createDate
等
这个想法是,服务(异步)将在给定用户的工作流开始时获取其账本条目的数量及其最新记录。在更新分类帐之前,它将执行一些操作。我希望最后一步执行TransactWrite
,其中条件检查可确保用户与开始时存在相同数量的分类帐条目。如果没有,则过程重新开始。
我知道DynamoDB支持对单个记录的属性进行条件检查,但是是否可以编写条件检查来查看查询返回的记录数?
aws dynamodb query --table-name myLedger --key-condition-expression "userId = :u" --expression-attribute-values '{":u": {"S": "0123abcd"}}' --select "COUNT"
答案 0 :(得分:1)
这是不可能的。
DynamoDB仅在文档级别运行,并且不知道在该分区键下存储了多少文档。您不能在不阅读所有文档的情况下弄清楚它,并且无法保证甚至可以在单个操作中做到这一点,更不用说可以在条件表达式中使用的方式了。
您设计的每个条目只有一个文档更适合于关系数据库,在这里实际上并不起作用。在文档数据库中,通常希望有一个包含多个条目的文档。
如果您重构数据模型以将所有条目都放在一个文档中,那么通过更新表达式自动执行此更新将变得很简单。