我正在编写一个应用程序,用户可以在其中创建带有开始日期和结束日期的项目,并将它们保存到Microsoft Sql Server中托管的SQL数据库中。应用程序中的规则是,在给定的时间内,只有一个项目可以处于活动状态(没有重叠的项目)。该应用程序还需要进行负载平衡,这(据我所知)意味着传统的信号灯/锁定将不起作用。
一些其他项目:
我们的目标是防止发生以下情况:
我的问题是,如何在负载平衡的服务器上同时锁定或阻止多个用户同时保存/插入。
注意:我们目前正在研究使用sp_getapplock,因为它似乎可以满足我们的要求,如果您对此有经验,或者觉得这将是一个错误的决定,并且希望对此进行详细说明!
编辑:添加了其他信息
答案 0 :(得分:0)
至少有两个选择:
您可以创建一个存储过程,该存储过程将INSERT操作包装在事务中:
begin tran
select to see if there is an existing record
you can:
- invalidate the previous record
- insert a new record
or
- raise an error
commit tran
catch error
rollback tran
您可以采用“后赢制”策略,在这种策略中,您不使用写级别锁,而是使用读取级别的伪锁,本质上会忽略除最新记录以外的所有记录。