Nai*_*mar 9 mongoose mongodb node.js mongodb-query
在预订系统中,只有 5 个不同的用户可以创建预订。如果 100 个用户同时调用预订 api,如何使用锁定处理并发。我正在使用nodejs和mongodb。我浏览了 mongo 并发文章和 mongodb 中的事务,但找不到任何带有锁定的示例编码解决方案。
我已经通过乐观并发控制实现了解决方案(当资源争用较低时 - 这可以使用 versionNumber 或 timeStamp 字段轻松实现)。
提前感谢您向我建议锁定解决方案。
现在的算法是:
步骤 1:从 userSettings 集合中获取 userAllowedNumber。
//Query
db.getCollection('userSettings').find({})
//Response Data
{ "userAllowedNumber": 5 }
Run Code Online (Sandbox Code Playgroud)
步骤2,从预订集合中获取当前的bookedCount。
//Query
db.getCollection('bookings').count({ })
//Response Data
2
Run Code Online (Sandbox Code Playgroud)
第 3 步,如果bookedCount <= userAllowedNumber则插入预订。
//Query
db.getCollection('bookings').create({ user_id: "usr_1" })
Run Code Online (Sandbox Code Playgroud)
我在mongodb社区中深入讨论过关于事务锁定的问题。在结论中,我了解到并发现了交易的局限性。我们没有可以使用锁来处理此任务的并发请求。
您可以通过此链接查看完整的 Mongodb 社区对话 https://www.mongodb.com/community/forums/t/implementing-locking-in-transaction-for-read-and-write/127845
使用 Jmeter 测试的 Github 演示代码显示了限制,并且无法处理此任务的并发请求。 https://github.com/naisargparmar/concurrencyMongo
新的建议仍然受到欢迎和赞赏
| 归档时间: |
|
| 查看次数: |
2704 次 |
| 最近记录: |