【发布时间】:2018-08-17 21:51:59
【问题描述】:
我正在尝试开发一个预订系统,在检查其可用性后预订不同的资产。系统首先尝试从数据库中读取记录并检查被预订的插槽是否可用。如果是这样,系统会通过将新记录插入系统来为他们预订插槽。
现在的问题是,如果有多个用户请求预订,并且由于对数据库的多个请求可以交错,那么这种情况就有可能发生。
User 1 -> read request start
User 2 -> read request start
User 1 -> read request success (booking available)
User 2 -> read request success (booking available)
User 1 -> write a new record to the db (new booking)
User 2 -> write a new record to the db (new booking) but this conflicts with User 1.
为了避免这种情况,我最好在读操作开始之前就获得一个集合级别的锁,并且只有在最终写入完成后才释放锁。
我的理解正确吗?如果可以,这可以在 MongoDB 中完成吗?
非常欢迎使用 MongoDB、Mongoose 或 @tsed/mongoose 的任何解决方案。
【问题讨论】:
标签: mongodb mongoose database-concurrency database-locking