【发布时间】:2021-11-13 03:34:55
【问题描述】:
在预订系统中,只有 5 个不同的用户可以创建预订。如果 100 个用户同时调用预订 api,而不是如何处理并发锁定。我正在将nodejs与mongodb一起使用。我在 mongodb 中查看了 mongo 并发 article 和事务,但找不到任何带锁定的示例编码解决方案。
我已经通过乐观并发控制实现了解决方案(当资源争用较少时 - 这可以使用 versionNumber 或 timeStamp 字段轻松实现)。
提前感谢您建议我使用锁定解决方案。
现在算法是:
第 1 步:从 userSettings 集合中获取 userAllowedNumber。
//Query
db.getCollection('userSettings').find({})
//Response Data
{ "userAllowedNumber": 5 }
第 2 步,从预订集合中获取当前的bookedCount。
//Query
db.getCollection('bookings').count({ })
//Response Data
2
第 3 步,如果 bookedCount <= userAllowedNumber 则插入预订。
//Query
db.getCollection('bookings').create({ user_id: "usr_1" })
【问题讨论】:
-
没有回复意味着Mongodb不处理这种情况......是吗?
-
MongoDB 自 4.0 起支持多文档 ACID 事务,这是此处解释的用例的解决方案。在此处查看 Lauren 的 NodeJS 博客文章:mongodb.com/blog/post/…。或者使用涵盖类似用例的 Java 进行挖掘:“不要卖得比库存多”:mongodb.com/blog/post/…
标签: node.js mongodb mongoose mongodb-query