0
是否有标准设计模式来解决服务器上的多个并发创建请求? 例如)多个客户端(来自浏览器/手机)可以调用web服务为给定时间的医生创建预约。虽然,webservice最初可以检查医生是否免费然后创建,但仍然存在竞争状况,并可能最终在后端创建多个约会。我们如何阻止服务器创建多个约会?鉴于web服务在多台服务器上运行,约会没有任何固定的时间。多个创建操作请求
是否有标准设计模式来解决服务器上的多个并发创建请求? 例如)多个客户端(来自浏览器/手机)可以调用web服务为给定时间的医生创建预约。虽然,webservice最初可以检查医生是否免费然后创建,但仍然存在竞争状况,并可能最终在后端创建多个约会。我们如何阻止服务器创建多个约会?鉴于web服务在多台服务器上运行,约会没有任何固定的时间。多个创建操作请求
我不确定任何模式。我可以想到的一个想法。
1)添加一个检查,看看是否预约已存在:
if Appointment.where(time:, docter_id:).exists?
raise 'appointment already exists'
else
create_appointment
以上必须通过不存在检查,最终因并发的性质重复约会的可能性。这个问题有两种可能,
i)在数据库约束级别执行检查。 docter_id的唯一索引,appointment_time可能是一个好开始。如果出现错误,则处理它,因为它已经存在。在数据库级执行约束逻辑以确保从应用程序/脚本到更新数据库记录的一致性是很好的。
ii)第二个选项我可以想到悲观锁定交易的表 - 我不会建议创建一个记录。