一种基于局部路径锁的xml数据并发控制方法

文档序号:6584176阅读:394来源:国知局

专利名称::一种基于局部路径锁的xml数据并发控制方法一种基于局部路径锁的XML数据并发控制方法
技术领域
:本发明属于数据库
技术领域
,具体提出了一种新型的基于局部路径加锁模型的XML数据并发控制方法。通过本发明提出的并发控制方法,可以实现在进行XML事务操作时,只对根据XQuery定位到的节点或其父节点进行加锁。避免了传统的从根节点到目标节点的路径加锁方式,减少了对锁的频繁请求,提高了事务的并发度和执行效率。
背景技术
::随着XML相关标准的推广和应用,如何有效地存储、查询、更新XML数据已经成为了数据库领域的一个研究热点。在存储方面,研究者采用了多种方法将XML文档存储到数据库中。其中,借助传统关系数据库系统存储XML数据是目前流行的一种方式。在查询方面,XQuery语言已经成为了公认的XML数据查询的标准语言。在更新方面,W3C提出了XML数据更新的语法和语义规范XQueryUpdateFacility1.0。在XML数据更新中,事务的并发控制是一个重要的组成部分。传统的并发控制方式[1][2][3]主要是针对XML片段模型的路径加锁方式,即从对根节点到目标节点的路径上的所有节点进行加锁。这样的加锁方式会导致在一个事务中,从根节点到目标节点的整个路径都被锁住。在这种情况下,如果存在与目标节点及其父节点无关,但是存在于路径上的节点的事务,则该事务不能被执行。因此,这样的控制策略,造成了一个调度中整体事务的并发度不高。此外,这种加锁策略,需要从根节点到目标节点进行加锁,如果根节点到目标节点存在较高的深度,就会造成大量的加锁、解锁操作,从而产生较大的时间和空间的消耗。
发明内容本发明目的是解决传统的并发控制方式针对XML片段模型的路径加锁,即从对根节点到目标节点的路径上的所有节点进行加锁,从而造成了一个调度中整体事务的并发度不高的问题,提供一种基于局部路径锁的XML数据并发控制方法。本发明提供的基于局部路径锁的XML数据并发控制方法,包括XML数据模型的定义、锁模型的定义、锁协议以及并发控制操作方案,具体过程如下1.定义XML数据模型定义1:一篇XML文档D可以表示为一个序列(Sequence):S={si—s2—…sn)其中,Si是一个四元组(ID,tag,type,value),表示XML中的某个节点。四元组中各个项目的定义如下ID为此节点在关系型表中的标识;typeG{Document,Element,Attribute,Value}表示节点的类型;tag为节点的名称;value为节点的值;n为XML节点的个数,且n=|S|。如果si的type是Document,则表明此序列为一棵XML文档树如果si的type是Element,则表明此序列为一个XML文档的片段例如,图1是一篇XML文档,图2是按照定义1所定义的该文档的DOM树。按照模式映射的方法[4][5],将此文档存储到对应的关系数据库的关系表中,其具体结构如表1所示。<table>tableseeoriginaldocumentpage5</column></row><table>表1:存储XML文档片断的关系表结构本发明中所定义的XML数据模型,具有如下的特点1.DOM树的每一个节点,在系统表的存储是一行。2.每个节点进行编码时使用智能节点ID,这种节点编码蕴含了节点之间的父子关系,因此,在更新事务执行时的加锁申请过程中,可用于快速判断某个节点的祖先后裔是否存在更新操作。2.XML事务操作时加锁模型的制定2.l锁的类型本发明定义了6种锁,分为两类一类是物理锁,另一类是逻辑锁。逻辑锁与物理锁的差别是逻辑锁仅仅是逻辑持有,而不需要向锁管理器申请,在事务之间冲突检测过程中,通过查询函数来判断逻辑锁是否被节点持有。物理锁包括以下几种锁I:意向锁,节点N持有此锁,意向N的孩子或者兄弟正在进行值修改或者插入操作。锁X:节点级排他锁,节点N持有此锁,表明N正在进行重命名或者正在进行值修改操作。锁T:子树级排他锁,简称子树锁。锁的粒度为以N为根节点的整个子树,节点N持有此锁,表明以N为根的整棵子树已经被加入了排他锁。逻辑锁包括以下几种锁TA:逻辑锁。通过查询函数判定节点N的祖先(包括父亲)节点上是否持有T锁。如果有,则认为N上持有TA锁。锁TD:逻辑锁。通过查询函数判定节点N的后裔(包括孩子)节点上是否持有T锁。如果有,则认为N上持有TD锁。锁XD:逻辑锁。通过查询函数判定节点N的后裔(包括孩子)节点上是否持有X锁,如果有则认为N上持有XD锁。2.2定义T/X表结构及查询函数以判断是否持有TA、TD、XD锁目标节点上是否逻辑持有TA、TD和XD锁,需要通过查询函数来进行判定。为此,定义相关的结构和查询函数,如下所示定义2.T/X表—个存在于内存中的T表(X表)表示如下T/X={id"id2,idi…icU其中id为事务中所操作的某节点N的智能ID;当且仅当节点N被加上T/X锁时,N的智能节点ID被记录到T表(X表)当中。[OO33]定义3.查询函数Scan()Scan:(IDn,m,v)—Boolean其中,mG{T,X};vG{ascend,descend}。此函数将节点N的智能节点ID与T表(X表)中的智能节点ID进行比较,用来判断T表(X表)中是否含有N的祖先或者后裔。查询函数的执行条件当数据库启动侦听外界请求时,系统将构建T/X表,并将其存放于系统的底层内存中。为避免内存的访问冲突,在进行查询的时候,首先要对T/X表进行封锁。这样就保证在某个时刻,只有一个事务对T/X表进行操作,从而保证了查询函数返回正确的结果。查询函数的算法内容如下表示函数.Scan()输入节点N的智能id,T/X表,A/D祖先后裔标志符输出若表中存在符合关系的id,返回true,否则返回false步骤①id=GetID(n)/*获取节点N的智能id*/A通过遍历查找T/X表中是否含有节点N的祖先节点或者后裔节点.查到则退出承/②While(T/X-①)③{idt=getNextID(T/X)/*遍历获取T/X表中的智能id*/⑤{⑥if(true==Compare(id,idt))⑦returntrue③else⑨T/X=T/X-{idt}⑩}}returnfalse时间复杂度分析6查询函数Scan()中进行祖先/后裔节点判断时,Compare()函数可以在O(l)时间内完成。假设,XML文档的叶子节点数为k,则根据T表的定义,T表中最多的id数目为k。因此,节点判断的时间复杂度,最坏情况下为O(k)。考虑到要查找的id在T表中存在的位置是均匀分布的。则查询函数scan()的平均时间复杂度为0(k)/2。2.3、XML不同事务之间的各种锁的冲突相容性矩阵定义不同事务之间的冲突相容矩阵如表2所示。其中由1、T、X锁构成的冲突矩阵,是由真正加在节点上的锁构成的,这些锁通过锁管理器进行申请和释放;表中剩余的部分由TA、TD、XD逻辑锁构成,这些锁通过查询函数的返回值来判断是否被持有。I1XI+T一X——TA+—TO+—+XD+表2:不同事务之间的冲突相容矩阵3.定义目标节点加锁条件基于前面所描述的XML数据模型。在进行XML数据更新时,通过XQuery表达式将可以定位到其中的某一个或者多个节点作为加锁目标节点。在此基础上,定义更新操作应满足的条件,如下所示>目标节点在进行更新操作时必须锁住,不允许在此节点上执行任何其他的更新操作。>将要对目标节点N进行删除操作时,N的孩子和后裔节点中,不能有节点正在进行删除,插入,重命名或者更新操作。如果有,则需要等到孩子节点更新操作完成以后,才能对节点N进行删除。>将要对目标节点N进行删除操作时,N的父亲以及祖先节点不能进行删除操作。如果有,则等待,直到父亲或者祖先节点完成删除操作后,才能对N进行删除。》将要对目标节点N进行重命名操作时,N的父亲及祖先节点不能正在或即将被删除。如果有,则等待,直到父亲或祖先节点删除操作完成。》将要对目标节点N的孩子进行插入操作时,N节点以及N的祖先节点不能正在被删除。如果有,则等待,直到删除操作完成。此外,N节点也不能正在被修改值或重命名。^将要对目标节点N进行插入左右兄弟时,N节点及N的祖先节点不能正在被删除。如果有,则等待,直到删除操作完成。此外,N节点本身也不能正在执行任何更新操作。》将要对目标节点N进行修改值的操作时,不能允许其父亲以及祖先节点正在被删除。如果有,则等待,直到删除操作完成。此外,N节点的父亲节点不能执行任何更新操作。4.锁协议制定在冲突相容矩阵的基础上,本发明制定了锁协议,其特征如下所示■申请锁的规则事务在执行任何一种操作的时候,必须根据操作的具体类型进行合适类型锁的申请。如表3所示操作类型滞要申请加锁的节点锁的类型Insert《Stf,Ss)Srf定位的H标fj点iSs定位約源序列的根W点TDetete(Sd)Sdi'位的Hl小V/点TRename(,Ss)TReplaceValue(,Ss)s"ii'位的「n小节点的父Vi点XReplaceNode(Sd,Ss)Sd定仪的口标V〖点TSs定位的源i-i':+列的根'i'i点T表3:各种操作下,加锁的节点以及申请锁的类型其中,Sd为目标节点的XQuery定位语句,Ss为源节点的XQuery定位语句。B冲突检测规则当一个事务需要对不同的节点均需要加上锁时,只要其中任何一个节点的锁没有被加上,则必须根据冲突矩阵,等待其锁的加上,然后继续后续的更新操作。B每一个事务必须满足2PL协议。即在锁增长阶段申请锁,在锁縮减阶段释放锁。5.局部锁协议的正确性证明为了证明本文提出锁协议的正确性,需要证明基于此协议的任何一个事务均满足冲突可串行化。借鉴2PL的证明思路,即需要证明本协议下的I,X,T锁均不会在事务的前驱图中产生环。定义4:操作、事务、调度操作依据XML的节点操作模型,将一个操作表示为O(N)t,其中,T是一个事务。N为根据XQuery语句所定位的目标节点。根据XQueryUpdateFacility规范,0是Insert、ReplaceNode、ReplaceValue、Rename、Delete中的任何一禾中。事务一个事务是一个有限序列T={(^—02——On},序列中的每个元素均是一个操作0。调度一个调度S是若干个事务的交叉执行。对于一个调度来讲,为了实现其中事务的冲突可串行化,最简捷的方式是依据2PL协议,对于事务中的每一个操作O,在锁增长阶段申请加锁LockO,在锁縮减阶段释放加在O上的锁Unlock0。为此,首先提出如下命题命题1:假设,事务中的一个操作0的对象为节点X,依据2PL,则必有LockV0(x)<0(x)<UnlockV0(x);其中,符号<表示操作的执行顺序。如果Ol<02,表明,01要在02之前8执行。根据0的不同类型,并且依据局部路径锁协议下的申请锁的规则,在进行申请锁的过程中分别加上I锁、X锁、T锁,或判定其逻辑持TA锁、TD锁和XD锁,即VG{1,X,T,TA,TD,XD}。命题2:如果某个事务1\中的操作O(x)i与另外一个事务Tj的操作O(x)j冲突,则根据命题l和冲突相容矩阵,必然存在UnlockV0(x)i<LockV0(x)j或者UnlockV0(x)j<LockV0(x)i。由命题2进行延伸,提出引理1:引理l:假设一个调度中存在n个事务Tl,T2…Tn。Tl在T2之前提交,T2在T3之前提交,等等。以此类推,也必然存在UnlockVO(x)l<LockVO(x)n。证明根据命题2,在一个调度中,假设存在2个事务T1,T2。Tl要在T2之前进行提交。在T1中和T2中分别存在冲突的2个操作0(x)l和0(x)2。则必然存在UnlockVO(x)l<LockV0(x)2。不失一般性,假设一个调度中存在n个事务Tl,T2…Tn。Tl在T2之前提交,T2在T3之前提交,等等,以此类推。也必然存在UnlockVO(x)l<LockVO(x)n。证毕。根据引理l,可得出如下结论结论基于局部路径锁协议,所有的调度均可串行化。证明为了证明所有调度的可串行化,可以参照2PL的证明思路,即证明任何一个调度,其事务的前驱图不存在环,利用反证法。假设某个事务的前驱图中存在一个环,即Tl—T2—…Tn—Tl,则依据引理l,必然存在UnlockV0(x)l<LockVO(x)n<O(x)n<UnlockVO(x)n<LockVO(x)l。很显然,此结论与命题l矛盾。因此,此协议下定义的调度可以实现冲突可串行化。证毕。通过这个结论表明,本发明所提出的锁协议是正确的,其中定义的锁模型也是正确的。6.局部路径锁协议下XML数据并发控制方案制定在上述内容的基础上,本发明制定了XML数据并发控制方案。并发控制方案包括2部分只读事务与更新事务的并发控制以及更新事务之间的并发控制。分别描述如下1)采用多版本化协议实现只读事务与更新事务的并发控制本发明采用的多版本化协议,对于只读事务从不加锁。因此,多版本化协议具有只读事务永不阻塞的优点。同时更新事务也不会被只读事务阻塞。利用协议中经典的"快照隔离"特性定义只读事务与更新事务的并发控制方法。步骤如下所示步骤l:当一个只读事务T启动时,赋给此事务一个全局事务版本号。9步骤2:当调度器接收到只读事务T对节点N的读请求时,对该事务读取的最近已提交版本并进行判断。如果节点N被更新事务删除,说明此版本不存在,则执行步骤4;否则执行步骤3。步骤3:选择该事务开始时的最近已提交版本,进行事务提交。步骤4:返回固定信息码以表示节点N不存在,进行事务提交。2)采用局部路径锁协议实现更新事务之间的并发控制根据本发明所提出的局部路径锁协议,可以制定出更新事务之间并发时的控制方法。其步骤如下所示步骤1:一个更新事务T启动,根据冲突相容矩阵,对目标节点N加I锁。步骤2:通过查询函数对T表、X表进行检测,事务T确定目标节点上是否持有逻辑锁TA,TD和XD,并将目标节点的ID插入到T表或X表中。步骤3:事务T对目标节点N申请加T锁或者X锁。如果加锁成功(冲突矩阵检测通过),进行更新操作。否则,删除T表和X表的目标节点记录,事务T进入等待。更新事务并发控制执行流程如图5所示本发明的优点和积极效果传统的D0M树加锁方式,采用的是从根结点到目的节点的整个路径加锁,对目的节点改值时,路径加IX锁,目的节点加X锁。而采用本发明的局部路径锁协议,根据操作性质的不同仅仅对目标节点或者其父节点加锁,避免了传统的从根节点到目标节点的路径加锁方式,减少了对锁的频繁请求,从而提高了事务的并发度和执行效率。例如,图3和图4是传统的路径加锁方式和本发明的局部路径加锁方式的加锁实例比较图3中,假设Tl:修改book的标签;T2:要对节点/bib/book/author/last进行修改值。根据传统的路径加锁协议,Tl执行时,book需要加X锁,从根节点到bib到book节点之间的路径加锁IX;T2执行时,last需要加X锁,从根节点到bib到last节点之间的路径加锁IX。但是由于T1和T2在路径上有冲突,结果T1和T2无法实现并发执行。此外,假设T1在T2之前执行,对T2来讲,要从last节点至根节点逐层加锁,但加锁到根节点时,发现与Tl路径冲突,加锁不成功,则需要进行事务等待或者事务退出。这样就会造成大量的加锁、解锁操作或者由于等待而长时间占用系统资源,最终造成的结果是事务的执行效率不高。图4中,假设同样执行Tl和T2。根据局部路径锁协议,Tl执行时,book需要加X锁。T2执行时,last需要加X锁。假设Tl在T2之前执行。首先,Tl对book加X锁,并将book的智能节点id存入X表中。此时T2执行,T2对last申请加X锁,首先检查冲突矩阵,没有发现TA锁,则对last加上X锁。从而实现了T1和T2事务的并发。而且,依据这种加锁策略,仅仅在book和last节点上加了X锁,从而减少了系统资源消耗。从图3和图4对比可见,本发明提出了只针对XQuery定位到的节点和其父节点进行加锁的方式,避免了传统的从根节点到目标节点的路径加锁方式,减少了对锁的频繁请求,提高了事务的并发度和执行效率。图1是XML文档片断结构示意;图2是XML文档片断的DOM树型结构;图3是传统DOM树路径加锁协议操作实例;图4是局部路径加锁协议操作实例(NIL表示无锁);图5是更新事务之间的并发控制方案图;图6是实施例1中的XML文档片断结构示意图7是实施例1中的执行过程(第一)的示意图图8是实施例1中的执行过程(第二)的示意图图9是实施例1中的执行过程(第三)的示意图图10是实施例1中的执行过程(第四)的示意图图11是实施例1中的执行过程(第五)的示意图具体实施方式实施例1:本发明所描述的局部路径加锁协议下的多个事务并发的实例1.根据本发明提出的局部路径锁协议下XML数据并发控制方案。以图6所示的XML文档片断为例进行详细说明假设针对这个XML文档片断,存在5个事务,如下所示事务Tl:对节点bib/book[2]进行删除操作;事务T2:对节点bib/book/@year进行改值操作;事务T3:对节点/bib/book/author/last进行删除操作事务T4:对节点/bib/book/author进行r印lacenode替换操作;事务T5:对节点/bib/book[1]下插入一个孩子节点。当5个事务同时进行操作的时候,具体的执行过程如下第一、事务T1需要对book[2]加T锁,通过Scan函数检查T表后,发现没有其后裔或者祖先节点加了T锁,同时,通过Scan函数检查X表以后,没有孩子节点加锁X。贝U,事务Tl对book[2]直接加T锁。操作过程如图7所示。第二、事务T2进入,此时的D0M树中正在进行T1的针对book[2]的删除操作,T2需要修改/bib/book/@year的值。因此,T2先要对year加X锁,它首先通过Scan函数发现祖先节点中未含有T锁,则事务T2直接对year加X锁。此时,T2与Tl同时操作,实现了并发。操作过程如图8所示。第三、事务T3进入,对bib/book/author/last进行删除操作。T3需要对Last节点加T锁。加T锁前,通过Scan函数检查T表后,发现其后裔或者祖先节点未加T锁;同时,检查X表发现孩子节点未加X锁。则事务T3对bib/book/author/last加T锁。操作过程如图9所示。第四、事务T4进入,对bib/book/author进行r印lacenode操作。T4需要对author节点进行删除,加T锁。因此,T3首先通过Scan函数进行T表检测,发现其孩子中含有T锁节点,因此,author节点不能加T锁。所以T4被迫等待,直到T3完成才能进行后续操作。操作过程如图10所示。第五、事务T5进入,对bib/book[1]下插入孩子节点。T5需要对/book[1]节点加I锁。与前述步骤类似,经过T表分析和冲突相容性矩阵分析,T5可以与Tl,T2,T3共同进11行。操作过程如图ll所示。实施例2:产生并发冲突时,依据局部路径加锁协议制定的可串行化调度的实例在图1中所定义的文档片断上,假设事务Tl对节点/book/section/figure进行删除操作,事务T2对节点/book/section进行r印lacenode替换操作。并且Tl在T2之前执行。Tl对figure节点加T锁,申请T锁前,根据查询函数scan()进行T表和X表检测,发现figure节点没有持有TA锁、TD锁和XA锁,则事务Tl对figure申请T锁成功,并将figure的id存入到T表中。事务T2执行时,需要对section节点进行删除,并对section节点加T锁,因此,T2首先根据查询函数scan()进行T表检测,发现其孩子figure节点,这表明section节点逻辑持有TD锁,根据冲突相容矩阵,则产生冲突。因此,T2被迫等待,直到Tl完成后才能继续操作。一个依据局部路径加锁协议的可行的并发调度如表4所示________L___________________lScan(/0细始ecto,w—,r,Ascend)LockT麵fe鋒oo她e論嫌g,》1UnlockTcfe/efe(翻o驗eGffo禱gp婦》1,表4:事务1\和T2的一个并发调度实例实施例3:局部路径锁协议下的各种操作算法3.1与本发明所提出的算法中有关的一些概念和函数定义l)定位函数Pos()设Path表达式G{XPath表达式,XQuery表达式},则定位函数y=Pos(Path表说明此函数通过一个路径表达式获得目标节点序列S中的序号集合。本文中Path表达式的2个实例分别为DesPath目标序列路径和SrcPath源序列路径。[OWO]2)加锁函数Lock()设N为任意一个XML节点,LockmodeG{1,X,T},贝U,加锁函数y=Lock(N,Lockmode)。此函数表示对XML节点N加上I,X,T锁。3)冲突检测函数Conflict()设N为任意一个XML节点,LockmodeG{I,X,T},则冲突检测函数y=Conf1ict(N,Lockmode);yG{True,False}。此函数表示在XML节点N上需要申请新锁Lockmode时,根据冲突矩阵对申请锁进行冲突判断,返回值为True表示冲突,False表示不冲突。LodeT歸ptoce脇cfe(翻o缝ecffo攀,pteeelVode《翻o驗eefcn》2CommttUnlock應ptoc禱ode鋒oo她eeff細)2达式)122.2根据局部路径锁协议下,制定针对XML节点的各种操作算法,描述如下算法1.删除操作的处理算法输入一条XQuery语句输出如果事务更新成功,返回true;如果事务等待,返回false步骤①N:=Pos(XQuery),/*定位到目标节点N*//*利用Scan函数查找T/X表,确定N的祖先和后裔是否存在更新操作*/②IF(Scan(N,T,Ascend)==true||Scan(N,T,Descend)==true)③{N上逻辑持有锁TA或TD}④ELSEIF(Scan(N,X,Descend)==true)⑤{N上逻辑持有逻辑锁XD}A将T锁带入到冲突矩阵中进行冲突检测。如果冲突,事务等待,否则对节点N加T锁*/⑥IF(Conflict(N,T)==true)⑦{Waiting;⑧returnfalse}⑨ELSE⑩(Lock(N,T);(J])Add(T,Getld(N));/*将N的智能节点ID放入T表中*/⑩returntrue}ENDIF算法2.插入操作的处理算法输入DesXQuery目标节点定位语句,SrcXQuery源节点定位语句输出如果事务更新成功,返回true;如果事务等待,返回false步骤①N:=Pos(DescXQuery)/*根据目标XQuery定位到目标节点N*/②SN:=Pos(SrcXQuery)/*根据源XQuery定位到源节点SN*//*根据冲突相容矩阵,对节点N加I锁,如果成功执行步骤3,否则等待*/③IF(Conflict(,I)==true)④{Waiting;⑤returnfalse}⑥ELSE⑦(Lock(N,I);/*利用Scan函数查找T/X表,确定SN的祖先是否存在更新操作*/⑧IF(Scan(SN,T,Ascend)==true)⑨{SN上逻辑持有锁TA}/*将T锁带入到冲突矩阵中进行冲突检测。如果冲突,事务等待,否则对节点SN加T锁*/IF(Conflict(SN,T)==true)(0){Waiting:⑩returnfalse}⑩ELSE◎(Lock(SN,T);⑩Add(T,Getld(SN));A将SN的智能节点ID放入T表中*/returntrue}ENDIF算法3.重命名操作的处理算法输入DesXQuery目标节点定位语句输出如果事务更新成功,返回true;如果事务等待,返回false步骤①N:=Pos(XQuery),/*定位到目标节点N*//*利用Scan函数查找T/X表,确定N的祖先和后裔是否存在更新操作*/②IF(Scan(N,T,Ascend)==true)③{N上逻辑持有锁TA}/*将X锁带入到冲突矩阵中进行冲突检测。如果冲突,事务等待,否则对节点N加U)==true)⑤{Waiting;⑥returnfalse}⑦ELSE⑧(Lock(N,X);⑨Add(X,Getld(N));/*将N的智能节点ID放入X表中*/⑩returntrue}⑩ENDIF算法4.R印laceValue操作的处理算法输入DesXQuery目标节点定位语句,SrcXQuery源节点定位语句输出如果事务更新成功,返回true;如果事务等待,返回false步骤①N:=Pos(DesXQuery),/*根据目标XQuery定位到目标节点N*/②SN:=Pos(SrcXQuery)/*根据源XQuery定位到源节点SN*//*根据节点N分属于Attribute类型或者Element类型,分别进行不同处理*/③IF(type(N)=='Attribute'){/*根据冲突矩阵,对节点N的父节点加I锁,如果成功执行后续步骤,否则等待*/⑤{Waiting;⑥returnfalse}⑦ELSE14⑧(Lock(N,I)}/*利用Scan函数查找T表,确定N的祖先是否存在更新操作*/⑨IF(Scan(N,T,Ascend)==true){N上逻辑持有锁TA}/*将X锁带入到冲突矩阵中进行冲突检测。如果冲突,事务等待,否则对节点N加X锁*/(Q)IF(Conflict(N,X)==true)⑩{Waiting;returnfalse}⑩ELSE⑩{Lock(N,X);⑩Add(X,Getld(N));/*将N的智能节点ID放入X表中*/returntrue}⑩ENDIF)⑩ELSE/*N的类型是Element*/⑩{/*利用Scan函数查找T/X表,确定N的祖先和后裔是否存在更新操作*/@IF(Scan(N,T,Ascend)==true||Scan(N,T,Descend)==true)@{N上逻辑持有锁TA或TD}ELSEIF(Scan(N,X,Descend)==true)@{N上逻辑持有逻辑锁XD}/*将T锁带入到冲突矩阵中进行冲突检测。如果冲突,事务等待,否则对节点N加T锁*/IF(Conflict(N,T)==true)⑩{Waiting;參returnfalse}⑩ELSE⑩(Lock(N,T);Delete(Child(N));/*将N的孩子删除*/⑩Insert(SN)⑩returntrue}ENDIF,算法5.R印laceNode操作的处理算法输入DesXQuery目标节点定位语句,SrcXQuery源节点定位语句输出如果事务更新成功,返回true;如果事务等待,返回false步骤①N:=Pos(DesXQuery),/*根据目标XQuery定位到目标节点N*/②SN:=Pos(SourXQuery)/*根据源XQuery定位到源节点SN*/③对目标节点N执行算法2/*利用Scan函数查找T表,确定SN的祖先是否存在更新操作*/@IF(Scan(SN,T,Ascend)==true)⑤{SN上逻辑持有锁TA}/*将T锁带入到冲突矩阵中进行冲突检测。如果冲突,事务等待,否则对节点SN加T锁*/⑥IF(Conflict(SN,X)==true)⑦{Waiting;⑧returnfalse}⑨ELSE{Lock(SN,T);Add(T,Getld(SN));/*将N的智能节点ID放入X表中*/对目标节点N执行算法3◎returntrue}錢ENDIF参考文献[l]XMLTM:EfficirntTransactionManagementforXMLDocuments(Inproceedingsofthe2002ACMCIKMInternationalConferenceonInformationandKnowledgeManagement)[2]Lock-basedProtocolforProtocolforCooperationonxmlDocuments(In14thlnternationalWorkshopOndatabaseandexpersystemsApplication)[3]EvaluatingLock-basedProtocolsforCooperationonXmlDocuments[4]WangXin,YuanXiaojie,WangChenying,etal.XN-Store:AStorageSchemeforNativeXMLDatabases.JournalofComputerResearchandDevelopment,45(7):1211-1220,2008.(inChinese)(王鑫,袁晓洁,汪陈应,等.XN-Store:一种原生XML数据库的存储方案.计算机研究与发展,45(7):1211-1220,2008.)[5]汪陈应,袁晓洁,王鑫,刘众奇.BSC:—种高效的动态XML树编码方案.计算机禾斗学,32(3).2008。权利要求一种基于局部路径锁的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锁意向锁IX锁节点级排他锁T锁子树级排他锁第2.1.2、逻辑锁TA锁表征节点的祖先有删除动作TD锁表征节点的后裔有删除动作XD锁表征节点的后裔有值更新动作第2.2、定义T/X表结构及查询函数以判定是否持有TA、TD、XD锁第2.2.1、一个存在于内存中的T表(X表)表示如下T/X={id1,id2,idi…idn}其中id为事务中所操作的某节点N的智能ID;当且仅当节点N被加上T/X锁时,N的智能节点ID被记录到T表(X表)当中;第2.2.2、定义查询函数Scan()Scan(IDn,m,v)→Boolean其中,m∈{T,X};v∈{ascend,descend};此函数将节点N的智能节点ID与T表(X表)中的智能节点ID进行比较,用来判断T表(X表)中是否含有N的祖先或者后裔;如果·函数Scan(IDn,T,ascend)返回值为真,表明N的祖先存在删除操作,则判定N上逻辑持有锁TA·函数Scan(IDn,T,descend)返回值为真,表明N的后裔存在删除操作,则判定N上逻辑持有锁TD·函数Scan(IDn,X,descend)返回值为真,表明N的后裔存在修改值或者重命名操作,则判定N上逻辑持有锁XD第2.3、XML不同事务之间的各种锁的冲突相容矩阵定义根据2.1中对于锁的描述,制定了各种锁的冲突相容表其中由I、T、X锁构成的冲突矩阵,是由真正加在节点上的锁构成的;这些锁通过锁管理器进行申请和释放;表中剩余的部分由TA、TD、XD逻辑锁构成,这些锁通过查询函数的返回值来表明是否被逻辑持有;第2.4、锁协议的制定第2.4.1、申请锁的规则事务在执行任何一种操作的时候,必须根据操作的具体类型进行相应类型锁的申请;第2.4.2、冲突检测规则当一个事务需要对不同的节点均需要加锁时,只要其中任何一个节点的锁没有被加上,就必须根据冲突矩阵,等待其锁的加上,之后再继续后续的更新操作;第2.4.3、每一个事务必须满足2PL协议,即在锁增长阶段申请锁,在锁缩减阶段释放锁;第2.5、XML数据并发控制方案的制定第2.5.1、采用多版本化协议实现只读事务与更新事务的并发控制第2.5.2、采用局部路径锁协议实现更新事务之间的并发控制。全文摘要本发明属于数据库
技术领域
,具体提出了一种新型的基于局部路径加锁模型的XML数据并发控制方案。具体内容包括XML数据模型的定义、锁模型的定义、锁协议制定、并发控制的实现方案制定。通过本发明提出的并发控制方案,可以实现在对XML进行事务操作时,只对根据XQuery定位到的节点或者其父节点进行加锁,避免了传统的从根节点到目标节点的路径加锁方式,减少了对锁的频繁请求,提高了事务的并发度和执行效率。文档编号G06F17/30GK101702176SQ20091022869公开日2010年5月5日申请日期2009年11月25日优先权日2009年11月25日发明者孙博实,官莹,康宏,袁晓洁,黄晓骋申请人:南开大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1