悲观离线锁
作者:David Rice
通过一次只允许一个业务事务访问数据,来防止并发业务事务之间的冲突。
有关完整描述,请参见 EAA 模式 第 426 页
由于离线并发涉及操作跨越多个请求的业务事务的数据,因此最简单的方法似乎是为整个业务事务打开一个系统事务。然而,遗憾的是,这并不总是有效,因为事务系统并不适合处理长时间的事务。因此,您必须使用多个系统事务,此时您需要自行管理对数据的并发访问。
第一个尝试的方法是乐观离线锁 (416)。但是,这种模式存在问题。如果几个人在业务事务中访问相同的数据,其中一个人将轻松提交,而其他人将发生冲突并失败。由于冲突仅在业务事务结束时才被检测到,因此受害者将完成所有事务工作,却在最后一刻发现整个事务将失败,他们的时间将被浪费。如果这种情况在长时间的业务事务中经常发生,系统很快就会变得不受欢迎。
悲观离线锁通过完全避免冲突来防止冲突。它强制业务事务在开始使用数据之前获取对该数据的锁,因此,大多数情况下,一旦您开始一个业务事务,您就可以确信您将完成它,而不会被并发控制拒绝。