并发模型mongodb学说符号



我在MarketPlace平台上工作,有预订。有专业人士创造可用性。可用性是以时间段创建的,例如上午8:00到下午5:00。它是保存在mongodb中的周期。客户选择一个1小时的时段。(客户的日历是动态生成的,周期为1小时)例如:上午8:00至下午5:00期间有:上午8:00至9:00、上午9:00至上午10:00等…

因此两个客户不可能同时预订同一时段。

当客户选择一个时段并点击"预订按钮"时,预订对象将保存在会话中。客户购买此预订,然后将预订对象保存在预订集合中。

如何"锁定"第一位客户选择的期间,防止第二位客户预订相同的期间?

我如何将计时器固定为10分钟,如果"可用性"期间没有付款,则在日历中解锁该期间?如何创建一个与服务器同步的计时器,并在超时后重定向到主页?我必须创建一个正在进行预订的临时集合吗?或者将对象保留保存在我的集合"保留"中,状态为"正在进行"?

我使用symfony 3和mongodb。

谢谢。

如何"锁定"第一个客户选择的期间阻止第二个想要预订相同时段的客户?

MongoDB中对单个文档的更新是原子的,这就是为什么你可以设置保留标志,比如:

db.time_reservation.update(
{_id: "<period primary key>", reserved: false,}, {
$set: {
reserved: true,
reservedAt: new Date()
}
});

以及如何将计时器固定10分钟,如果没有付款时段"可用性",在日历中解锁该时段?

您可以使用cron命令来执行类似的操作

db.time_reservation.update({
reservedAt: {
$lt: new Date(ISODate().getTime() - 1000 * 60 * 10)
}
}, {$set: {reserved: false}});

如何创建与服务器同步的计时器并重定向到主页何时超时?

许多可能的解决方案:

  • 您可以在每个预订阶段检查

  • 您可以从后端获取时间戳并对其进行验证(如果这不是SPA,请将其保存到cookie中)

最新更新