2PL+MVCC看一些场景

前提

  • 1.我们通过一个简单的2PL控制事务。
  • 2.数据是保存在B+树里面有版本号。
  • 3.事务提交、回滚我们是会把数据的状态改一下。

为什么会有以下问题

  • 1.主要是因为当前的demo查询是通过主键和版本来的,可能会查到之前其他事务的数据。
  • 2.查询操作我是这样来的:查询数据A,我们查的是最新提交的数据(因为最新提交了所以当前事务是没触发这里的锁),或者是中间状态但是事务是但是是当前版本的(当前事务对数据做了多次操作,但没提交)。
  • 3.我这里的2PL锁控制不知道算严格不?

如果当前只是一个查询事务做了提交

  • 1.当我们申请锁的时候区分下读锁和写锁,如果有写锁才被允许提交的。所以如果全部是读锁的话事务提交对数据是不做任何处理的。

如果当前事务A提交的间隙有个事务B操作了数据

  • 1.假如事务A有锁lock-1,lock-2,B会操作lock2的数据
  • 2.A对lock-1操作完,去拿lock-2的锁,如果拿到的话B会在A操作完且释放后才会拿到,所以这个场景是不受影响的,即A先操作数据、B在操作数据。
  • 3.A对lock-1操作完,去拿lock-2的锁,如果没拿到但是B拿到了这时候B操作完数据,A再拿到lock-2的锁操作数据,这个场景就是B先操作数据、A再操作数据。

如果当前事务回滚了

  • 1.没有写操作回滚不用管了
  • 2.有写操作的话,锁是互斥的,你已经拿到了锁(意味着当前事务操作的数据是最新的)回滚的也是当前的事务的数据。

还有一些设计问题还没想好

  • 访问的权限类的限制,我现在搞了个demo可以直接传事务号过去(目前做的一个限制是存活的事务号才可以操作数据)

最后再说下2PL(前面写有文章介绍过

  • 主要是要加锁就一直加,释放锁就只能一路释放操作。(不允许加的过程有释放或者释放过程有加锁的)
相关推荐
SirLancelot16 分钟前
AI大模型-基本介绍(一)RAG、向量、向量数据库
数据库·人工智能·ai·向量·向量数据库·rag
李慕婉学姐12 分钟前
Springboot面向电商的仓库管理系统05uc4267(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
imbackneverdie17 分钟前
AI工具如何重塑综述写作新体验
数据库·人工智能·考研·自然语言处理·aigc·论文·ai写作
用户990450177800940 分钟前
ruoyi-vue2集成flowable6.7.2后端篇
后端
千寻技术帮43 分钟前
10379_基于SSM的校园跑腿服务平台
mysql·微信小程序·校园跑腿·ssm
qq_12498707531 小时前
基于springboot框架的小型饮料销售管理系统的设计与实现(源码+论文+部署+安装)
java·spring boot·后端·spring·毕业设计
Warren981 小时前
datagrip新建oracle连接教程
数据库·windows·云原生·oracle·容器·kubernetes·django
焦糖玛奇朵婷1 小时前
扭蛋机小程序:线上扭蛋机模式发展新形势[特殊字符]
大数据·数据库·程序人生·小程序·软件需求
我命由我123451 小时前
Python Flask 开发:在 Flask 中返回字符串时,浏览器将其作为 HTML 解析
服务器·开发语言·后端·python·flask·html·学习方法
IT_陈寒1 小时前
JavaScript 性能优化:5个被低估的V8引擎技巧让你的代码提速50%
前端·人工智能·后端