我试图在 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"
最佳答案
这是不可能的。
DynamoDB 仅在文档级别运行,并且不知道该分区键下存储了多少文档。如果不阅读所有文档,您就无法弄清楚它,并且无法保证您甚至可以通过单个操作来完成此操作,更不用说以可在条件表达式中使用的方式了。
每个条目一个文档的设计更适合关系数据库,但在这里并不适用。在文档数据库中,您通常希望有一个包含多个条目的文档。
如果您重构数据模型以将所有条目包含在单个文档中,则通过更新表达式以原子方式执行此更新就变得微不足道。
关于javascript - DynamoDB - 基于记录数量的条件放置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56449332/