分布式数据库的并发控制读书报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
读书报告
信息学院计算机科学与技术
杨凌雯201320602019
一、并发控制中的概念和理论
1.1 并发控制中的概念
数据库的特点就是数据的集中管理和共享。在通常情况下它总是有若干个事务在执行,这些事务可能并发地存取相同的数据,称为事务的并发操作。
并发控制是负责正确协调并发事务的执行,保证这种并发的存取操作不致破坏数据库的完整性和一致性,确保并发执行的多个事务能够正确的运行并获得正确的结果。
分布式并发控制主要解决多个分布式事务对数据并发执行的正确性。
1.丢失更新问题
在图5. 1(a)中,数据库中数据项x的初值是100,事务I对x的值减30,事务T2对x的值增加一倍,如果执行次序是先T1后T2,那么结果x的值是140。如果是先T2后T1,那么x 的值是170。这两种情况都应该是正确的,因为具体实现时只有其中一种情况.但是若按图5. 1 (a)那样的并发执行,结果x的值是200,这个值肯定是错误的。因为在时间t7丟失了事务T1对数据库的更新操作,因此这个并发操作是不正确的。
2.不一致分析问题
在图5. 1(b)中,事务T1对x值的值减30,而車务T2只要读出x的值。但在t5时刻,由于T1已更新了x的值,此时T2使用的x值仍是100,因此就造成了不一致,这个问题称为不一致分析问题。
3.依赖于未提交更新的问題
在数据库技术中,把未提交的随后又被撤销的更新数据称为“脏数据”。这里事务T2在t4时刻读的x值就是脏数据。
1.2事务可串行化理论的基本概念
一般来说,对一组并发的分布式事务可能存在多种正确调度,可串行化调度是分布式事务能否正确执行的基本方法。
事务的可串行性是指若千个事务并发执行的结果与按希望的顺序执行的结果相同时,称诸事务是可串行的。这就是说,如果事务的并发执行能够通过以一定顺序串行执行就可使数据库处于新的一致状态,那么诸如丢失更新的问题就可能得到解决,这就是串行化理论的观点。
1.分布式事务的一个调度
在数据库系统中,事务访问数据库中数据的方式是通过发出读操作和写操作原语来实现的。通常,以T1表示某个事务,以Ri(x)表示该事务对数据项x的读操作,以Wi(x)表示该事务对数据项x的写操作,这里不考虑数据项x的粒度。事务的一个操作序列称为一个调度(schedule,也称历史history),一般以字母S表示。例如:S:R1(x),R2(y),W2(y),R2(x), W1(x),W2(x)
S是关于两个事务的一个调度。
两个同时访问同一数据项x的操作,如果其中至少有一个是写操作,那么称这两个操作是冲突的。
1)读操作不相互冲突,因此只有两种冲突:读-写冲突(或写-读冲突),及写-写冲突。
2)两个操作可以属于同一事务或者两个不同的事务,在后者的情况下,称为两个事务冲突。3)如果有两个事务Ti和Tj,Ti的所有操作都先于Tj的操作,那么这两个事务为串行执行的,必定不会有冲突。
2.串行调度
对一个串行调度来说,它总是可以正确的执行,执行它可以使数据库保持一致状态。
1) 如果S正确执行完成,则S中的每一个事务都被提交,由于事务的原子性保证了数据库的一致性。
2) 如果S在执行时发生故障,若Tk之前的事务都已提交,则夭折Tk,使数据库的状态恢复到Tk前的状态。该状态的数据库也是一致的,因力Tk之前的事务都已提交。
3) 如果S在执行时发生故障,若Tk之前的事务有被夭折的,则夭折Tk,重做Tk以前已被提交的事务,撤销Tk以前被夭折的事务,此时数据库也是一致的。
串行调度总是可以使数据库保持一致。但是,串行调度时系统的运行效率较低。
3.可串行化调度
串行调度对不会引起冲突的操作要求过高,它们可以进行并行操作。
如果在两个操作间存在冲突,这两个操作的执行顺序就很重要;而对于两个不会引起冲突的操作,它们的执行顺序则并不重要。
事务的并发控制主要是正确处理并发执行的事务对数据库的冲突操作。可串行化调度,直观上看,是让有冲突的操作串行执行,非冲突的操作并行执行,所以可串行化调度就是事务并发控制要寻求的基本方法。
通常分布式事务的可串行化调度可以转化为子事务的可串行化调度,但涉及多副本选择时,分布式事务调度要多做一个选择副本的操作,以避免冲突操作。
1.3 分布式事务的可串行化理论
现在给出关下分布式事务的可串行化理论的一些定义。
1.事务
2.冲突操作
如果有两个操作P和Q对同一个数据x进行操作,其中有一个是写操作W[x],则P 和Q称为冲突操作。
3. 并发事务的一个调度(简称并发调度)
第一种情况简单地说明了调度的域是每个事务域的并集。第二种情况定义排序关系为每个事务排序关系的超集,这保证了每一事务内部的操作的顺序。最后一种情况定义了冲突操作的执行顺序。
4.串行调度
5.一致性调度
如果执行一个调度S,使数据库从一个一致状态转变到另一个一致状态,则称调度S 为一致性调度。显然,串行调度是一致性调度,但是一致性调度不一定是串行调度。
6.两个调度等价(冲突等价)
7.可串行化调度
与串行调度等价的调度称为可串行化调度。
例1考虑两个事务,分别定义为
对于这两种调度,可以产生如下五种调度:
S1={R1(x),x=x+10,W1(x),R1(y),y=y-15,W1(y),C1, R2(x),x=x-20,W2(x),R2(y),y=y*2,W2(y),C2}
S2={R1(x),x=x+10,W1(x), R2(x),x=x-20,W2(x), R1(y),y=y-15,W1(y),C1, R2(y),y=y*2,W2(y),C2}
S3={R1(x),x=x+10,W1(x), R2(x), x=x-20,W2(x),R2(y),y=y*2,W2(y),C2 ,R1(y),y=y-15,W1(y),C1}
S4={R2(x),x=x-20,W2(x),R2(y),y=y*2,W2(y),C2 ,R1(x),x=x+10,W1(x),R1(y),y=y-15,W1(y),C1}
S5={R2(x),x=x-20,W2(x), R1(x),x=x+10,W1(x), R2(y),y=y*2,W2(y),C2 ,R1(y),y=y-15,W1(y),C1}
如果将事务提交延迟到两个事务操作完成之后执行,有:
1)调度S1和S4是串行调度
2)调度S2和S1的冲突操作具有相同的顺序,因此是等价调度;S2是可串行化调度,也是一致性调度
3)调度S3虽是一致调度,但是它不与S1或S4等价,所以S3不是可串行化调度
4)调度S5和S4等价,所以S5是一致调度,也是可串行化调度
有以下推论:
1)一个可串行化调度必定与某个串行调度等价,且是一致性调度
2)一致性调度不一定是可串行化调度
3)同一事务集几个可串行化调度,他们的结果未必相同
1.4 分布式事务的可串行化调度测试
1.使用优先图判别可串行化调度
调度S 的优先图是一个有向图G(N,E) ,其中
N: 一组节点N={T1T2,…,Tn}, S中的事务
E: 一组有向边E={e1,e2,…,en}, Ti,Tj 是图中的一条边,当且仅当p Ti, q Tj 使得p, q 冲突,并且p
算法5.1 测试调度S的可串行化
1)对于调度S中的事务Ti,在图中创建一个节点Ti。
2)对于每一种这样的情形:如果S中的在Ti执行了W(X)操作后执行Tj的R(X)操作,那么在优先图中创建一条边(Ti→Tj )。
3)对于每一种这样的情形:如果S中的在Ti执行了R(X)操作后执行Tj的W(X)操作,那么在优先图中创建一条边(Ti→Tj )。
4)对于每一种这样的情形:如果S中的在Ti执行了W(X)操作后执行Tj的W(X)操作,那么在优先图中创建一条边(Ti→Tj )。