数据库——冲突可串行化调度

目录

一、同一事务

二、可串行化调度

三、冲突可串行化调度

四、冲突可串行判别算法

五、参考


一、同一事务

Ri(x):表示事务 Ti 读 x

Wj(x):表示事务 Tj 写 x

什么是同一事务:只要下标一样就是同一事务。比如说 Ri(x)Wi(x) 都是Ti事务,该事务包括一次读一次写操作。记住,不在乎读写操作谁在前,只要下标一样,其实就是同一事务。

实例1, 串行调度:

{\color{Red} R_{1}(A)W_{1}(A)R_{1}(B)W_{1}(B)}{\color{Blue} R_{2}(A)W_{2}(A)R_{2}(B)W_{2}(B)}

该调度操作很多,操作数据也有A、B两种,但可以看到前面一部分操作都是 T_{1} 事务,后面一部分都是 T_{2} 事务,该调度就是串行调度 T_{1}T_{2}

实例2,什么样的调度不是串行调度?

{\color{Red} R_{1}(A)W_{1}(A)}{\color{Blue} R_{2}(A)W_{2}(A)}{\color{Red} R_{1}(B)W_{1}(B)}{\color{Blue} R_{2}(B)W_{2}(B)}

 可以事务执行的次序 T1 -> T2 -> T1 -> T2,事务T1不是一次性执行完的,中间还插入了一个事务T2,这种执行方式就叫交叉并发执行,而不是串行执行的。

二、可串行化调度

一个调度是正确的有两种情况:

本身就是一个串行调度,如实例1

是一个可串行化调度。调度比较复杂,如实例2,但它的执行结果与某一次序串行调度的结 果一致时就行。

这里某一次序包括T_{1}T_{2}T_{2}T_{1} 两种。只要原结果与这两种中一个相同就行。

当有三个事务T_{1}T_{2}T_{3}时,有123、132、213、231、312、321共六种次序。

注意这里指的次序是事务的次序,而一个事务内部很多操作,这些内部操作的次序是不能改变的,原因后面再说。

 对于非串行调度,我们通过与每一种次序结果的比较,得出该调度是不是可串行调度,也就是该调度是不是正确的。

这时候就有小伙伴要提出:这样一个一个比较是不是太繁琐了?的确,所有又提出了冲突可串行化调度的概念。

三、冲突可串行化调度

提醒一下:王珊老师的《数据库系统概念》中冲突的类型没有写第一种,所以事务内部两个操作的顺序是不能换的

也就是说原调度Sc只要交换两个事务不冲突的操作,如果能转化为一个串行调度Sc^{'},那么Sc为冲突可串行化调度,即是正确的调度。

例如:实例2通过交换次序转化为实例1,实例2就是一个冲突可串行调度。

 

 注意:

 这里调度L1和L2对X的结果其实都是决定于W_{3},即使L2不满足冲突可串行化,但W_{3}在最后面起决定作用,所以调度L2也是正确的。

这时候又有小伙伴要提出了:做题的时候我不管怎么交换次序也得不到Sc^{'},我不能说由于我没有找到,所以它就不是冲突可串行化调度?的确,我们要知道怎么证明调度是非冲突可串行化调度。

四、冲突可串行判别算法

我们重点分析一下实例2:

  所以,我们拿到一个调度,你就直接画有向图,根据有向图进行判断。

留个例题,欢迎大家留言:

五、参考:

b站 哈尔滨工业大学-数据库系统(上+中+下)P235https://www.bilibili.com/video/BV1PJ411F78b?p=236&vd_source=638f399bdd78ea702c3b0541b704e044可串行化 冲突可串行化 判断方法_bijingrui的博客-CSDN博客_冲突可串行化https://blog.csdn.net/bijingrui/article/details/105479502

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

就是搞笑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值