我尝试使用MongoDB作为数据库,Apollo GraphQL和Express服务器来实现房间预订系统。
我必须在我的数据库中收集:一个用于房间,一个用于预订。为了检查可用性,系统会查找当前在数据库中的所有预订,并检查在指定时段内哪个房间可用。 如果系统预订房间,则会在数据库中插入一条新记录。
问题在于以下情形,两个预订请求同时针对同一房间:
dynamicFileByteProvider = new DynamicFileByteProvider(fileName);
dynamicFileByteProvider.Changed += new EventHandler(byteProvider_Changed);
dynamicFileByteProvider.LengthChanged += new EventHandler(byteProvider_LengthChanged);
如何保证一个房间永远不会与预订冲突?
问题是,我有一个可用性请求,另一个要求将预订写入数据库。
答案 0 :(得分:0)
我对postgres做过同样的事情,但是我确定MongoDB具有相同的功能。
在您的预订表中,密钥将是房间和日期范围的组合。
您可以在表上定义约束,即具有相同room_id的raw不能重叠 日期范围。
当您要插入新预订时,只需将其插入,数据库应避免插入与时间范围重叠的原始数据(由于约束)