发明名称 一种基于局部路径锁的XML数据并发控制方法
摘要 本发明属于数据库技术领域,具体提出了一种新型的基于局部路径加锁模型的XML数据并发控制方案。具体内容包括:XML数据模型的定义、锁模型的定义、锁协议制定、并发控制的实现方案制定。通过本发明提出的并发控制方案,可以实现在对XML进行事务操作时,只对根据XQuery定位到的节点或者其父节点进行加锁,避免了传统的从根节点到目标节点的路径加锁方式,减少了对锁的频繁请求,提高了事务的并发度和执行效率。
申请公布号 CN101702176B 申请公布日期 2011.08.31
申请号 CN200910228692.4 申请日期 2009.11.25
申请人 南开大学 发明人 康宏;袁晓洁;黄晓骋;官莹;孙博实
分类号 G06F17/30(2006.01)I 主分类号 G06F17/30(2006.01)I
代理机构 天津佳盟知识产权代理有限公司 12002 代理人 侯力
主权项 1.一种基于局部路径锁的XML数据并发控制方法,其特征在于该方法包括相应的XML数据模型的定义、锁模型的定义、锁协议以及并发控制操作方案,具体过程如下:第1、XML数据模型定义此数据模型将一篇XML文档D表示为一个序列(Sequence):S={s1→s2→...sn}其中,Si是一个四元组(ID,tag,type,value),表示XML中的某个节点;四元组中各个项目的定义如下:ID为此节点在关系型表中的标识;type∈{Document,Element,Attribute,Value}表示节点的类型;tag为节点的名称;value为节点的值;n为XML节点的个数,且n=|S|;根据模式映射的方法,将文档D存储到对应的关系数据库的关系表中;第2、XML事务操作时加锁模型的制定第2.1、锁的类型第2.1.1、物理锁:I锁:意向锁X锁:节点级排他锁T锁:子树级排他锁第2.1.2、逻辑锁:TA锁:表征节点的祖先有删除动作TD锁:表征节点的后裔有删除动作XD锁:表征节点的后裔有值更新动作第2.2、定义T/X表结构及查询函数以判定是否持有TA、TD、XD锁第2.2.1、一个存在于内存中的T表表示如下:T={id<sub>1</sub>,id<sub>2</sub>,id<sub>i</sub>…id<sub>n</sub>}其中id为事务中所操作的某节点N的智能ID;当且仅当节点N被加上T锁时,N的智能节点ID被记录到T表当中;第2.2.2、一个存在于内存中的X表表示如下:X={id<sub>1</sub>,id<sub>2</sub>,id<sub>i</sub>…id<sub>n</sub>}其中id为事务中所操作的某节点N的智能ID;当且仅当节点N被加上X锁时,N的智能节点ID被记录到X表当中;第2.2.3、定义查询函数Scan():Scan:(ID<sub>n</sub>,m,v)→Boolean其中,m∈{T,X};v∈{ascend,descend};此函数将节点N的智能节点ID与T表或者X表中智能节点ID进行比较,用来判断该表中是否含有N的祖先或者后裔;如果:·函数Scan(ID<sub>n</sub>,T,ascend)返回值为真,表明N的祖先存在删除操作,则判定N上逻辑持有锁TA; ·函数Scan(ID<sub>n</sub>,T,descend)返回值为真,表明N的后裔存在删除操作,则判定N上逻辑持有锁TD;·函数Scan(ID<sub>n</sub>,X,descend)返回值为真,表明N的后裔存在修改值或者重命名操作,则判定N上逻辑持有锁XD;第2.3、定义目标节点加锁条件在进行XML数据更新时,通过XQuery表达式可以定位到其中的某一个或者多个节点作为加锁目标节点;在此基础上,定义更新操作应满足的节点加锁条件,如下所示:·目标节点在进行更新操作时必须锁住,不允许在此节点上执行任何其他的更新操作;·将要对目标节点N进行删除操作时,N的孩子和后裔节点中,不能有节点正在进行删除,插入,重命名或者更新操作,如果有,则需要等到孩子节点更新操作完成以后,才能对节点N进行删除;·将要对目标节点N进行删除操作时,N的父亲以及祖先节点不能进行删除操作,如果有,则等待,直到父亲或者祖先节点完成删除操作后,才能对N进行删除;·将要对目标节点N进行重命名操作时,N的父亲及祖先节点不能正在或即将被删除,如果有,则等待,直到父亲或祖先节点删除操作完成;·将要对目标节点N的孩子进行插入操作时,N节点以及N的祖先节点不能正在被删除,如果有,则等待,直到删除操作完成;此外,N节点也不能正在被修改值或重命名;·将要对目标节点N进行插入左右兄弟时,N节点及N的祖先节点不能正在被删除,如果有,则等待,直到删除操作完成;此外,N节点本身也不能正在执行任何更新操作;·将要对目标节点N进行修改值的操作时,不能允许其父亲以及祖先节点正在被删除,如果有,则等待,直到删除操作完成;此外,N节点的父亲节点不能执行任何更新操作;第2.4、XML不同事务之间的各种锁的冲突相容矩阵定义根据2.1中对于锁的描述,制定了各种锁的冲突相容矩阵;其中T1和T2为2个并发事务,T1和T2均定位到相同的XML节点N; <img file="FSB00000452379100031.GIF" wi="886" he="661" />+表示兼容-表示冲突其中由I、T、X锁构成的冲突矩阵,是由真正加在节点上的锁构成的,这些锁通过锁管理器进行申请和释放;表中剩余的部分由TA、TD、XD逻辑锁构成,这些锁通过查询函数的返回值来表明是否被逻辑持有;第2.5、锁协议的制定第2.5.1、申请锁的规则:事务在执行任何一种操作的时候,必须根据操作的具体类型进行相应类型锁的申请,如下表所示:<img file="FSB00000452379100032.GIF" wi="1696" he="909" />其中,S<sub>d</sub>为目标节点的XQuery定位语句,S<sub>s</sub>为源节点的XQuery定位语句;第2.5.2、冲突检测规则:当一个事务需要对不同的节点均需要加锁时,只要其中任何一个节点的锁没有被加上,就必须根据冲突相容矩阵,等待其锁的加上,之后再继续后续的更新操作;第2.5.3、每一个事务必须满足2PL协议,即在锁增长阶段申请锁,在锁缩减阶段释放锁;第2.6、XML数据并发控制方案的制定第2.6.1、采用多版本化协议实现只读事务与更新事务的并发控制其步骤如下所示:步骤1:当一个只读事务T启动时,赋给此事务一个全局事务版本号, 步骤2:当调度器接收到只读事务T对节点N的读请求时,对该事务读取的最近已提交版本并进行判断;如果节点N被更新事务删除,说明此版本不存在,则执行步骤4;否则执行步骤3,步骤3:选择该事务开始时的最近已提交版本,进行事务提交,步骤4:返回固定信息码以表示节点N不存在,进行事务提交;第2.6.2、采用局部路径锁协议实现更新事务之间的并发控制其步骤如下所示:步骤1:一个更新事务T启动,根据冲突相容矩阵,对目标节点N加I锁,步骤2:通过查询函数对T表、X表进行检测,事务T确定目标节点上是否持有逻辑锁TA,TD和XD,并将目标节点的ID插入到T表或X表中,步骤3:事务T对目标节点N申请加T锁或者X锁,如果加锁成功,则进行更新操作;否则,删除T表和X表的目标节点记录,事务T进入等待。 
地址 300071 天津市南开区卫津路94号