Pessimistic Offline Lock悲观离线锁
每次只允许一个业务事务来访问数据,以防止并发业务事务中的冲突.

- 离线并发处理通常会出现多个业务事务操作同一数据.
- 最简单的办法是为整个业务事务保持一个系统事务.但是事务系统不适合于处理长事务.
- 首选乐观离线锁.
- 而悲观离线锁,作为它的补充.从一开始就避免冲突.
- 它要求业务事务在对数据进行操作前就必须获取该数据的锁.
- 一旦开始了一个业务事务,就确信不会再提交时由于并发冲突而被迫回滚数据.
- 运行机制
- 决定使用哪种锁
- exclusive write lock独占写锁.写目的的会话数据时使用,当对数据的读取要求不高时.
- exclusive read lock独占读锁.仅是为了读目的时的数据.限制了并发性.
- read/write lock读/写锁.
- 读锁和写锁互斥,同一数据记录上只能被附加上一种.
- 允许并发的读锁.读锁会防止其他业务事务修改数据.但是允许其他业务事务读取记录.
- 允许同时读增加了系统的并发性.但是其实现复杂.
- 构建锁管理对象
- 该对象负责授予或者拒绝业务事务获取/释放锁的请求.
- 必须知晓被锁住的资源,和锁的拥有者(业务事务).
- 只能有一张关于锁的表.该表存在于内存或者SQL语句实现的.
- 锁必须是管理对象的私有域.业务事务只能与管理对象交互,而不能直接操作锁对象.
- 定义业务事务使用锁管理对象的协议
- 对什么加锁,
- 通常仅在ID或主键加锁,因为使用它们来查找对象.
- 何时加锁,
- 通常在读取数据之前获取锁.保证加锁的是最新数据时采取加锁.
- 何时释放锁,
- 在业务事务完成时释放.
- 当无法获得锁时的动作.
- 可能会在业务事务一开始就因为无法获取锁而终止事务.
- 对于相互等待对象的锁资源造成的死锁.
- 让锁管理对象在锁不可用时抛出异常即可.直接避免死锁.
- 丢失的会话中锁的超时.Client端在事务进行中崩溃了.
- 让应用服务器的超时机制处理.
- 给每个锁加上时间戳,定时清除超过一定时间的锁.
- 对什么加锁,
- 使用时机
- 适合于冲突率很高的并发会话中.
- 也用于冲突处理代价很高时.
- 它只能作为乐观锁的补充,不推荐使用.
- 可以考虑使用长事务.其实现比悲观锁简单.
Pessimistic Offline Lock悲观离线锁的更多相关文章
- Optimistic Offline Lock乐观离线锁
通过冲突检测和(发生冲突时的)事务回滚,来防止并发业务事务中的冲突. 通常一个业务事务的执行,会跨越一系列的系统事务. 一旦超出了单个系统事务的范围,就不能仅依靠DB管理程序来保证数据一致性. 乐观离 ...
- [转]掌握 ASP.NET 之路:自定义实体类简介 --自定义实体类和DataSet的比较
转自: http://www.microsoft.com/china/msdn/library/webservices/asp.net/CustEntCls.mspx?mfr=true 发布日期 : ...
- Catalog of Patterns of Enterprise Application Architecture
Catalog of Patterns of Enterprise Application Architecture Last Significant Update: January 2003 A s ...
- SQL-乐观锁,悲观锁之于并发
每次写博客,第一句话都是这样的:程序员很苦逼,除了会写程序,还得会写博客!当然,希望将来的一天,某位老板看到此博客,给你的程序员职工加点薪资吧!因为程序员的世界除了苦逼就是沉默.我眼中的程序员大多都不 ...
- Coarse-Grained lock 粗粒度锁
用一个锁Lock一组相关的对象 有时,需要按组来修改多个对象. 这样,在需要锁住其中一个的时候,必须连带地将其他的对象都上锁. 为每一个对象都加上一个锁是很繁琐的. 粗粒度锁是覆盖多个对象的单个锁. ...
- 观锁与悲观锁(Hibernate)
乐观锁与悲观锁 文章转自网上好像是玉米田的,忘记了 锁( locking ) 业务逻辑的实现过程中,往往需要保证数据访问的排他性.如在金融系统的日终结算 处理中,我们希望针对某个 cut-off 时间 ...
- 不容易理解的 lock 和 merge
Hibernate:不容易理解的 lock 和 merge 目录 背景Lock官方的注释LockMode.NONELockMode.READLockMode.UPGRADEMerge官方注释detac ...
- Java Hibernate中的悲观锁和乐观锁的实现
锁(locking) 业务逻辑的实现过程中,往往需要保证数据访问的排他性.如在金融系统的日终结算 处理中,我们希望针对某个cut-off时间点的数据进行处理,而不希望在结算进行过程中 (可能是几秒种, ...
- SQL Server 锁机制 悲观锁 乐观锁 实测解析
先引入一些概念,直接Copy其他Blogs中的,我就不单独写了. 一.为什么会有锁 多个用户同时对数据库的并发操作时会带来以下数据不一致的问题: 1.丢失更新 A,B两个用户读同一数据并进行修改,其中 ...
随机推荐
- PHP 基础复习 2018-06-21
(1)PHP Zip File 函数 $zip = zip_open("test.zip"); if ($zip) { while ($zip_entry = zip_read($ ...
- poj2689素数问题
打算重新刷一下数论题,忘了很多了,水平也很差,此题入手就不顺了,刷了一个早上,只是一个简单 的素数应用罢了.题意:找出区间长度不超过10^6的最近的素数和最远的素数(相邻的), 算法:数在int范围内 ...
- React学习之State
本文基于React v16.4.1 初学react,有理解不对的地方,欢迎批评指正^_^ 一.定义组件的两种方式 1.函数定义组件 function Welcome(props) { return & ...
- spring/spring boot/spring mvc中用到的注解
在spring Boot中几乎可以完全弃用xml配置文件,本文的主题是分析常用的注解. Spring最开始是为了解决EJB等大型企业框架对应用程序的侵入性,因此大量依靠配置文件来“非侵入式”得给POJ ...
- 通过socket过去本地ip,port和远端ip,port
struct sockaddr addr;struct sockaddr_in* addr_v4;int addr_len = sizeof(addr); //获取local ip and portZ ...
- MySQL命令行自动补全表名
注意:在命令行下只有切换到数据库之后,才能补全表名,对于命令是不能补全的. 1.my.conf增加如下配置: [mysql] #no-auto-rehash auto-rehash #添加auto-r ...
- 佳能 imageclass mf40120
加粉2612A 加粉方式: 完全拆解安装:在技术部 自已研究 简单拆开,一分为二,倒粉,然后,加分:一些其他单位 外部加粉,拆粉口外盖:一些其他单位
- [React] {svg, css module, sass} support in Create React App 2.0
create-react-app version 2.0 added a lot of new features. One of the new features is added the svgr ...
- Hibernate之三态篇
一.概况 (一)瞬时状态(暂时态) 在对象中假设对象刚被创建但没有被持久化的话就是瞬时态 特点: (1) 不和 Session 实例关联 (2)在数据库中没有和瞬时对象关联的记录 (二)持久状态 持久 ...
- C语言-- static 全局使用示例
C语言-- static 全局使用示例 前言:看到很多使用Objective-C开发IOS的大牛,有时候会使用static全局变量,相比之下,我却很少用这个,从而很少对其有着比较有实质意义的理解,甚 ...