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(前面写有文章介绍过

  • 主要是要加锁就一直加,释放锁就只能一路释放操作。(不允许加的过程有释放或者释放过程有加锁的)
相关推荐
wo_jack4 小时前
C++ 入门笔记(十六):第16课 vector 模拟实现十问十答 —— 从三指针到迭代器失效
c++·后端·面试·stl·vector
量化分析码农5 小时前
【Python量化波动率实战 02】波动率会传染:EWMA 指数加权给近期行情更大话语权
后端
GISer_Jing6 小时前
如何学习Agent
后端·langchain
JWASX7 小时前
【Go】map 源码解析 - group
后端·golang·map·源码分析
lambo mercy8 小时前
AI智能租房助手
数据库
量化分析码农8 小时前
【Python量化波动率实战 01】波动率是怎么算的:年化、滚动与区间估计一次讲清
后端
特立独行的猫A8 小时前
AI 时代,我为什么推荐用 cj-tauri 开发桌面应用
java·后端·python
金銀銅鐵8 小时前
从一个类名到一张类图:用反射自动生成 PlantUML
java·后端·uml
浮生若城9 小时前
MySQL:库与表的操作
数据库·mysql
薛定谔的悦9 小时前
光储充一体机从主控到执行单元的双层架构
数据库·mongodb·架构