简介可串行化

调度(schedule)指数据库要执行多项事务,每项事务包括好几条指令,先执行什么指令后执行什么指令的安排

但是指令的安排顺序(即调度)不同,事务的执行结果也不同。例如

 

事务1

 

事务2

1.1

t = read(a)

1.2

s = read(a)

2.1

t = t + 100

2.2

s = s × 2

3.1

write(a,t)

3.2

write(a,s)

4.1

t = read(b)

4.2

read(b,s)

5.1

t = t + 100

5.2

s = s × 2

6.1

write(b,t)

6.2

write(b,S)

a初始值为10b初始值为20

如果调度为1.1, 1.2, 2.1, 2.2, 3.1, 3.2, 4.1, 4.2, 5.1, 5.2, 6.1, 6.2a=20b=40

如果调度为1.1, 2.1, 3.1, 1.2, 2.2, 3.2, 4.2, 5.2, 6.2, 4.1, 5.1, 6.1a=220b=140

所以调度不同,事务执行结果也不同。我们必须有一个标准来判断某种调度是否正确。这个标准就是事务串行——先执行事务1的所有指令,再执行事务2的所有指令——后的结果。如果调度结果与串行结果相同,则调度正确;反之则错误。此概念与操作系统中多线程的执行类似。

对于正确的调度,我们给它一个形容词,说此调度是可串行的(Serializable)。可串行的是英文直译,更准确的词可以是“串行等价的”,即该调度的结果与事务串行的结果是相等的。下文就使用串行等价这个词。

  1. 如果两项事务只是读数据,则指令的执行顺序是无关紧要的;

  2. 如果两项事务读写不同的数据,则指令的执行顺序是无关紧要的;

  3. 如果两项事务读写同一条数据,则指令的执行顺序是重要的。我们把这两项事务称为冲突的事务

第(1)(2)两类事务的任何调度,都是串行等价的。对于第(3)类事务,如果调度正确,我们可以说此调度是冲突可串行的(Conflict Serializable),更准确的说法可以是“冲突串行等价的”,表示该调度的结果与冲突(的事务)串行的结果是相等的。冲突串行等价的串行等价的的子类。

爱让一切都对了

2011年4月10日 星期日

本文依照知识共享-署名-相同方式共享3.0协议发表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值