发文章
发文工具
撰写
网文摘手
文档
视频
思维导图
随笔
相册
原创同步助手
其他工具
图片转文字
文件清理
AI助手
留言交流
目录[-]
通过冲突监测和事务回滚来防止并发业务事务中的冲突。
一个业务事务的执行常常要跨越一系列的系统事务。而一旦超出单个系统事务的范围,就不能仅依靠数据库管理程序来确保业务事务将会使记录数据处以一致的状态中。当两个会话同时处理同样的记录时,很难保证数据的完整性,还可能丢失对数据的更新,当某个会话正在编辑数据时,其他的会话很可能读到不一致的数据。
用乐观离线锁可以解决这个问题,方法是要验证由一个会话提交的相关修改不会与其他会话中的修改发生冲突。
悲观离线锁假设会话冲突的可能性很大,从而对系统并发性进行限制,而乐观离线锁假设会话冲突的可能性很小,认为会话冲突不经常发生,这使多个用户同时对一份数据进行处理成为可能。
乐观离线锁通过检查在会话读取一条记录后没有其他的会话修改改数据来包装数据的一致性。可以在任何时候获取一个乐观离线锁,但他只在获得该锁的系统事务过程中有效。因此,业务事务为了不破坏记录数据,必须对他在每一个系统事务中的变更集成员申请乐观离线锁,也就是说,只要系统事务中有对数据库的修改,就需要获取乐观离线锁。
最常见的实现方式是为每条记录关联一个版本号。
每次只允许一个业务事务访问数据以防止并发业务事务中的冲突。
主要问题是:如果多个人在业务事务中访问同一数据,其中只有一个人能正常提交,其他人失败。
通过三步来实现悲观离线锁:
1、决定需要使用哪种锁
2、构建一个锁管理对象,
3、定义业务事务使用锁的过程。
另外如果将悲观离线锁作为乐观离线锁的补充来使用,需要决定对那些记录类型加锁。
锁类型:
定义业务事务使用锁管理对象的协议,协议说明对什么加锁,何时加锁,何时解锁,以及无法获取锁时的动作。
用一个锁锁住一组相关的对象
使用乐观离线锁为一组对象加一个版本号,悲观离线锁加一个统一的标记。
允许框架或层超类型代码来获取离线锁。
必须加锁的任务不应该显式地由应用发开人员完成,而应该隐含的由应用完成。
乐观离线锁对每个表每行数据存储版本,在sql中统一判断。
本章主要讲解离线锁,当系统中有多个用户对同一数据进行操作时,必须保证修改的完整性和有效性。大多数情况下使用隐含的乐观离线锁。
来自: icecity1306 > 《产品设计》
0条评论
发表
请遵守用户 评论公约
MySQL学习笔记(13):锁和事务
脏读:一个事务正在对一条记录做修改,在这个事务提交前,如果另一个事务也来读取同一条记录,就会读取到脏数据(如果不加控制,读取到第一个事务修改的数据,而后第一个事务回滚,第二个事务读取到的...
乐观锁和悲观锁的区别
乐观锁和悲观锁的区别乐观锁。一般的实现乐观锁的方式就是记录数据版本。1.查询出商品信息select (status,status,version) from t_goods...
【MySQL笔记】正确的理解MySQL的乐观锁,悲观锁与MVCC
【MySQL笔记】正确的理解MySQL的乐观锁,悲观锁与MVCC正确的理解MySQL的乐观锁,悲观锁与MVCC.乐观锁和悲观锁的抉择OCC,PCC,MVCC 参考资料。前者是一个锁思想,可以将后者根据是否进行趋近于乐观或悲观...
深入理解乐观锁与悲观锁
如果一个事务执行的操作都某行数据应用了锁,那只有当这个事务把锁释放,其他事务才能够执行与该锁冲突的操作。乐观锁( Optimistic Locking ) 相对悲观锁而言,乐观锁假设认为数据一般情况下不会造成...
MySQL中的乐观锁,悲观锁和MVCC全面解析
MySQL中的乐观锁,悲观锁和MVCC全面解析。MVCC的实现,是通过保存数据在某个时间点的快照来实现的。用来解决读-写冲突和写-写冲突的的加锁并发控制适用于写多读少,写冲突严重的情况,因为悲观锁是在读...
Optimistic Offline Lock乐观离线锁
Optimistic Offline Lock乐观离线锁通过冲突检测和(发生冲突时的)事务回滚,来防止并发业务事务中的冲突.
关于thinkphp连贯操作加锁的详细介绍lock
redis 分布式锁的 5个坑,真是又大又深
redis 分布式锁的 5个坑,真是又大又深引言。随着 使用redis 锁的时间越长,我发现 redis 锁的坑远比想象中要多。同样是redis分布式锁过期,而业务逻辑没执行完的场景,不过,这里换一种思路想问题,把...
Oracle数据库中的锁机制研究 Oracle认证考试指导
oracle数据库的锁类型 根据保护的对象不同,oracle数据库锁可以分为以下几大类:dml锁(data locks,数据锁),用于保护数据的完整性;在oracle数据库中,dml锁主要包括tm锁和tx锁,其中tm锁称为表级锁...
微信扫码,在手机上查看选中内容