《企业应用架构模式》(POEAA)读书笔记 (4)-- 离线并发模式
并发管理的正确目标是尽量增加对数据的正确访问,同时减少冲突
离线并发模式有两种:使用乐观离线锁、使用悲观离线锁
离线锁可以理解为一种非服务器管理的锁,或者说是自管理的锁,应用在适当的地方注册锁,获取数据,然后离线,并对数据进行离线的操作;其他的应用通过检测已经注册的锁来决定是否进行并发操作
1. 悲观离线锁
悲观离线锁假设会话冲突的可能性很大,从而对系统的并发进性进行限制
在对不一致读的要求不高时,第一选择是使用独占写锁(不可以再添加任何读锁,当然写锁也不能);如必须读出最新数据,而不在乎是否要修改,则应使用独占读锁(不可以再添加任何写锁,但读锁是允许的)。结合以上两种,提供互斥读锁的限制,又有互斥写锁的并发性的锁称为 读/写锁---读/写锁互斥不能同时加,但并发的读锁是允许的
构建悲观离线锁的步骤:决定使用哪种锁>>构建一个锁管理对象>>定义业务事务使用锁的过程
让锁管理对象在锁不可用时抛出异常而不是等待锁释放,可以免除死锁
悲观离线锁作为乐观离线锁的补充,只在真正需要的时候才应该使用
2. 乐观离线锁
乐观离线锁假设会话冲突的可能性很小,从而使得多用户对一份数据进行处理成为可能
通过冲突检测和事务会滚来防止并发事务中的冲突
本质就是通过将会话中的版本号与当前记录数据的版本号相比较,事务成功提交以后版本号增加;或者在更新的SQL语句中包含对所有字段的检查,可以不需要为数据库增加版本字段,但可能导致性能损失
乐观离线锁必须自定检查以防止不一致读
一个高效的合并策略能使乐观离线锁变得非常强大,当冲突发生时,合并策略可以合并更改并重新提交