我正在尝试开发一个预订系统,在检查其可用性后预订不同的资产。系统首先尝试从数据库中读取记录并检查被预订的插槽是否可用。如果是这样,系统通过将新记录插入系统来为他们预订插槽。
现在的问题是,如果有多个用户请求预订,并且由于对 db 的多个请求可以交错,这种情况就有可能发生。
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的任何解决方案。