首页 > 数据库 > 数据库开发技术 > 并发访问控制(4)--OCC并发访问控制算法4

注释:如下所提及的文献,请按照索引号对应参考《分布式数据库原理、架构与实践》一书的引用参考。


自适应的OCC
文献[217]认为,在异构(负载不单一,如范围扫描与单点读(或写)混杂,即批量操作和少量对象的读(或写)操作混杂)环境下,OCC验证阶段的算法对事务处理的效率影响较大,这包括两个因素:一是操作类型(如获取一个单一元组的读操作,其验证代价和获取多个元组的范围扫描的代价差异较大),二是负载类型(如不同负载下,基于KEY做范围扫描在验证阶段的性能不同)。文献[217]总结了业界两种实现OCC技术的方式:
q本地读集验证(local read-set validation,LRV):所谓本地读集,指的是某个待验证事务自己的私有内存空间中存储的读集。验证的时候,通过对读集重新读取来检查数据是否被修改,如果没有被修改,验证成功并提交。该方法适用于单点读类场景。
q全局写集验证(global write-set validation,GWV):所谓全局写集,指的是全局并发事务的写操作结果集。验证的时候,判断待验证事务的读集和全局写集是否存在交叉,如果没有交叉,则验证通过。该方法适用于范围扫描类场景,属于BOCC种类。
故文献[217]中提出一个自适应的OCC算法,该算法根据负载的操作类型(读或写操作)、访问负载(读或写操作的访问元组数)来建立代价模型(被访问的元组数和某项操作的代价值的乘积作为代价值),根据代价选取验证算法(有多种验证算法,比如读集、带有读集的谓词集、不带有读集的谓词集等验证算法,即前述的LRV、LRV+GWV、GWV),即表明根据负载量和操作类型自动选取不同的验证算法,这就是“自适应(Adaptive)”的含义。该自适应不是多种并发访问控制算法之间自动切换式的自适应,而是在OCC算法内的几种不同实现方式之间自动切换的自适应。因此算是OCC算法的一个改进算法。

OCC与DTA
OCC算法在实现可串行化时,需要对并发事务进行排序,其排序方式是:在事务验证阶段进行冲突检测,检测通过后为事务号赋值并据此实现事务的可串行化。这种方式本质上是TO算法的一种实现(参考4.2.2节)。
但是,传统的OCC算法,待验证事务生命周期的开始时间和结束时间的时间戳值的获取,依赖的是一个逻辑时钟或物理时钟,不管是逻辑时钟还是物理时钟,其值的获取都需要依赖一个时钟生成器,时钟值单调递增,会导致一些并发事务被中止,从而降低了并发度。
文献[118]基于OCC框架,利用动态时间戳分配思想(dynamic timestamp allocation,简称DTA,参考4.5.1节和文献[166]),为分布式数据库系统提出一种在验证阶段基于访问数据项的时间戳值,来动态调整事务提交时间戳值的方法。DTA方法和OCC算法结合,实现OCC算法中事务号的动态生成,而不是依赖一个全局的事务管理器。这一点有利于在事务号、事务开始和提交时间戳生成这些点上实现去中心化。但是文献[118]中的时间戳值,在分布式系统中,事务处理机制依赖局部节点的时间戳值,此时多个局部节点的时间戳值需要互相广播以确定事务的事务号(OCC原始算法是在事务成功提交前才确定事务号,而事务号是一个逻辑时间戳值)。广播的方式增加了事务的执行时间,使得分布式系统的事务吞吐量降低(但去中心化的方式又增加了分布式系统的事务吞吐量)。

OCC算法的临界区问题
对于OCC算法来说,验证和写入阶段需要放到临界区中,一次只允许一个事务进入临界区,目的是避免验证、提交期间发生新的写写(条件二规定)、读写(别的并发事务不可以把新写的值提交成功)冲突,避免已经可能存在的冲突被成功提交,这在客观上起到了为事务排序的作用因,而具有可串行化的功效(4.3.1节讨论的是原始的OCC在验证阶段获取事务号,即根据TO算法实现可串行化与此相关)。而分布式系统中无法采用临界区,替代方法可如下:
1. 锁机制。验证阶段开始时,对所有访问数据加锁。如果验证失败,可回滚,或不释放锁,重启验证流程。为避免死锁,可以对要加锁的数据项按照某个原则排序(文献[220]),然后加锁,只要有序加锁,即能避免死锁。更多内容可参见文献[115]。
2.时间戳机制。全系统范围内,在验证开始时,统一地分配时间戳(全局唯一的递增时间戳值),通过时间戳排定事务的可串行化顺序,从而确定了验证和写入的顺序。更多内容可参见文献[116]。
3. 写写冲突验证机制。在验证阶段中,验证本事务与已提交事务的写集是否相交,相交就回滚本事务,属于BOCC种类。更多内容可参见文献[116]。
文献[220]提示,全局的临界区(global critical sections)是OCC算法的最大瓶颈。关于OCC算法的内容,建议大家阅读文献[176]。



扫码加关注,知数行云,专业有深度
声明:本文禁止用于开发“任何软件程序,包括但不限于训练机器学习或人工智能(AI)系统”。
原文作者:那海蓝蓝知数行云;如有侵权,请联系管理员删除。