javascript - DynamoDB - 基于记录数量的条件放置

标签 javascript node.js amazon-dynamodb aws-sdk

我试图在 DynamoDB 中实现某种乐观锁定,其中根据给定分区键(表使用复合键)存在的记录数插入新记录。

特定的上下文是一个分类账,其中分类账中的每个文档代表存款或取款,并包含诸如 totalBalancepurchasedItem (如果是存款则为 null)、 userIdcreateDate

这个想法是,服务(异步)将在工作流程开始时获取给定用户的分类帐条目数量以及他们的最新记录。在更新分类帐之前它会执行一些操作。我希望最后一步执行 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/

相关文章:

javascript - 在下面提到的场景中如何为爱好提供 typescript 类型?

amazon-web-services - 使用 PITR 恢复 DynamoDB 表并更新 Cloudformation/CDK/其他服务引用

ios - Swift上的AWS dynamoDB batchWriteItem示例

java - 如何将 DynamoDB 与 Project Reactor 结合使用?

javascript - 如何从邮箱获取 Office 365 Outlook 文件夹名称

javascript - 使用 Q.Promises 递归地从 DynamoDB 获取记录

javascript - reactjs doc提到useEffect Hook 中的延迟事件,这是什么意思?

windows - EPERM,不允许操作错误,配置存储

node.js - 如何更改 Node 中 PCM 音频流的音量?

node.js - 使用环回更改 GET 用户/登录请求中的密码加密