预订系统MongoDB,Apollo禁止在同一房间预订

时间:2018-11-21 10:45:50

标签: mongodb concurrency

我尝试使用MongoDB作为数据库,Apollo GraphQL和Express服务器来实现房间预订系统。

我必须在我的数据库中收集:一个用于房间,一个用于预订。为了检查可用性,系统会查找当前在数据库中的所有预订,并检查在指定时段内哪个房间可用。 如果系统预订房间,则会在数据库中插入一条新记录。

问题在于以下情形,两个预订请求同时针对同一房间:

dynamicFileByteProvider = new DynamicFileByteProvider(fileName);
dynamicFileByteProvider.Changed += new EventHandler(byteProvider_Changed);
dynamicFileByteProvider.LengthChanged += new EventHandler(byteProvider_LengthChanged);

如何保证一个房间永远不会与预订冲突?

问题是,我有一个可用性请求,另一个要求将预订写入数据库。

1 个答案:

答案 0 :(得分:0)

我对postgres做过同样的事情,但是我确定MongoDB具有相同的功能。

在您的预订表中,密钥将是房间和日期范围的组合。

您可以在表上定义约束,即具有相同room_id的raw不能重叠 日期范围。

当您要插入新预订时,只需将其插入,数据库应避免插入与时间范围重叠的原始数据(由于约束)