2016-12-20 101 views
0

是否有标准设计模式来解决服务器上的多个并发创建请求? 例如)多个客户端(来自浏览器/手机)可以调用web服务为给定时间的医生创建预约。虽然,webservice最初可以检查医生是否免费然后创建,但仍然存在竞争状况,并可能最终在后端创建多个约会。我们如何阻止服务器创建多个约会?鉴于web服务在多台服务器上运行,约会没有任何固定的时间。多个创建操作请求

回答

0

我不确定任何模式。我可以想到的一个想法。

1)添加一个检查,看看是否预约已存在:

if Appointment.where(time:, docter_id:).exists? 
     raise 'appointment already exists' 
    else 
     create_appointment 

以上必须通过不存在检查,最终因并发的性质重复约会的可能性。这个问题有两种可能,

i)在数据库约束级别执行检查。 docter_id的唯一索引,appointment_time可能是一个好开始。如果出现错误,则处理它,因为它已经存在。在数据库级执行约束逻辑以确保从应用程序/脚本到更新数据库记录的一致性是很好的。

ii)第二个选项我可以想到悲观锁定交易的表 - 我不会建议创建一个记录。