面向xml的标记回溯的一致性维护方法

文档序号:6555443阅读:153来源:国知局
专利名称:面向xml的标记回溯的一致性维护方法
技术领域
本发明属于计算机支持的协同工作(Computer Support Cooperative Work)技术领域,具体涉及一种面向XML的标记回溯的一致性维护方法,该方法可以使得多个用户通过已有的应用软件实时地编辑同一XML数据对象,通过一种无锁的实时协同技术,多个用户间不会相互影响。本发明可以支持XML数据的Query操作和Update操作,自动处理用户之间的操作冲突,在各个用户间实现数据的一致性维护。
背景技术
“计算机支持的协同工作”(CSCW,Computer Support Cooperative Work)可以定义为在计算机技术支持的环境中(即Computer Support),一个群件协同工作完成一项共同的任务(即Cooperative Work)。它的目标是要设计各种各样的协同工作的应用系统。
CSCW的产品可以成为群件(GroupWare)。CSCW与群件有细微差别,CSCW是一门学科,而群件是一具体的技术或实体,具体实现的CSCW系统被认为是群件一类的实例,但有时两个术语也被混用。
CSCW的形成和发展有一定的必然性。首先,在现代的信息社会中,人的生活方式和劳动方式具有群体性,交互性,分布性和协作性等特点。其次,计算机技术(包括并行及分布处理技术,多媒体技术,数据库技术,认知科学等等)、通信及计算机网络技术的飞速发展,构成了CSCW实现的技术基础。另外,并行工程(Concurrent Engineering)这一概念的提出也起到了重要的作用。并行工程是集成、并行设计产品及相关过程的系统方法,它强调Team Work(组工作),而对Team Work的技术支持是和CSCW的研究密切相关的。因此可以说CSCW是在现代社会中,以人们协同工作方式为背景的,以计算机和通信技术的发展和融合为基础,具有广泛的应用领域为前提条件而自然形成的。它涉及到众多的学科领域,如计算机,管理学,通信,分布系统,人工智能,社会学,心理学,组织理论等等。
CSCW的目的就是在计算机环境下提供对人们群体工作的支持,因此说,通信、合作、协调是CSCW的三要素。
CSCW的基础是通信,自然的组通信发生在地理上是分布的用户之间(本地通信可以认为可是分布系统的特例),因此网络通信是至关重要的,并且在合作环境中处理多媒体文件传输和数据控制是很复杂的。而基于计算机的或者以计算机为媒体的通信,并没有完全和其他的通信形式相结合。异步的基于文本的电子邮件和公告板与同步的电话和面对面的交谈是不同的人们不能在任意的两个电话号码之间传送文件。把计算机处理技术和通信技术结合起来可以帮助解决这个问题。
CSCW的形式是合作,与通信相似,合作是小组活动的重要内容。在群体活动中,任意一项活动都必须是多人合作完成。有效的合作要求人们必须共享信息。但是当前的信息系统尤其是数据库系统在很多情况下把人们互相隔离开。比如,当两个设计人员使用同一个CAD数据库进行操作是,他们不可能同时修改同一个设计物体的不同部分并且知道他的合作者所做的修改;他们必须通过互相检查才能知道对方所做的工作。许多任务都需要良好的共享环境,可以在适当的时候友好的通知群组的活动信息以及各个用户的活动。
CSCW的关键是协调。如果一个组的活动是协调的,那么它的通信和合作将会大大得到加强。一个不能很好的进行协调的工作小组,它的成员之间势必会经常发生冲突和重复劳动。当几个部分共同组成一个任务时,协调本身被看作是一个必不可少的活动。当前的数据库应用提供了对共享对象的访问,然而大多数软件工具只提供对单用户的支持,对支持小组的协调这一重要功能所做的却很少。
随着企业及机构全球化意识(面向全球范围提供其产品或服务)的加强,能够支持此协作的系统将在规范管理、提高效率、降低成本等方面发挥无可替代的作用,因此也将成为必不可少的信息设施。这种走向大规模协作的趋势随着若干重要应用模式的出现而逐渐明朗。这些应用模式包括电子业务、虚拟组织、协同建筑、远程教育、远程医疗等等,我们相信这些应用模式将对未来社会人们的工作、学习与生活等产生深远的影响。
著名市场分析机构IDC每两年都会发布一次协同软件的市场分析和预测,数据指出,早在2001年美国协同软件市场份额已经达到3%至5%,最近一次的报告指出到2009年,全球TCA市场规模将达到75亿美元。
计世资讯(CCW Research)发布的报告显示,早在2004年中国协同软件市场规模已达到5.89亿元,其中协同工具软件市场规模在0.6亿元左右,协同平台及应用软件市场5.29亿元左右;协同软件市场主要集中在华东、华南以及华北的三个区域,其中华东区域占全部市场的26.76%。2004年,中国协同工具、平台及应用软件市场销售总额超过5.89亿元人民币。从2000年开始,随着信息化的推进、互联网和IT应用的普及,中国协同软件市场逐渐形成。尤其是电子邮件日趋成为企业日常经营管理中重要的沟通工具之后,协同软件市场逐渐成为应用软件市场的一个重要组成部分。预期2004~2008年,协同软件市场将以34.45%的年复合增长率发展,到2008年,市场总额将达到19.26亿元。
群件是CSCW领域的一个重要分类,即支持人们进行协同工作的软件系统。组编辑是群件应用领域一种。它允许多个用户通过网络同时参与一个共享数据对象的编辑和修改。组编辑并不仅仅局限于文本,还可以应用于各种类型数据对象的协同修改(文字、图形,媒体等),是维护多副本数据对象一致性的一个重要技术。组编辑技术研究一直是CSCW领域的顶级国际会议ACM CSCW和ACM Group上的重要内容,专门的研讨会也已经召开了五届。组编辑的相关技术也已经得到了广泛的应用,如基于MS Word/MS PowerPoint的两个支持多用户组编辑的系统已经被实现。
组编辑一个最基本的目标是隐藏用户对网络延迟的感受。通过在每个用户端维护一个数据副本,实现对本地操作的立即响应。于是一致性维护是组编辑中最主要的挑战之一。在过去的二十年中,许多相关的技术也得到了长足发展,但是一致性维护方面的许多难题仍然没有得到完善的解决。目前国际上在一致性维护问题上,大都着眼于操作转换的方法。但是操作转换方法在解决一致性维护的若干难题以及对Undo操作的支持方面仍然存在着很大的困难。

发明内容
本发明的目的在于提出一种面向XML的标记回溯的一致性维护方法,具体是构建一个应用程序的一致性维护引擎,在该引擎中包括程序的控制算法、回溯算法和操作执行算法。引擎中还包括一个本地的状态向量维护方法和广播方法。其中,可以使得多个用户实时地编辑同一XML数据对象,通过一种无锁的实时协同技术,多个用户间不会相互影响,本发明可以支持XML数据的Query操作和Update操作,自动处理用户之间的操作冲突,在各个用户间实现数据的一致性维护。
下面先介绍一些相关的基本概念。
组编辑是群件应用领域一个重要分类。它允许多个用户通过网络同时参与一个共享数据对象的编辑和修改,组编辑的一个重要目标就是本地操作的立即响应,即本地操作的无延迟执行。实现操作的无延迟执行的一个重要手段就数据的全复制式结构,即每个用户保留一份数据副本,用户的操作在本地可以立即执行,然后发送给其它用户,但全复制式结构会导致一致性维护问题。
一个实时CSCW系统必须同时满足下面3个一致性条件才是一致的①数据一致性(convergence)执行完一组协同操作后,各结点上数据拷贝的内容应保持完全一致②因果一致性(causality preservation)任意两个操作C1,C2,若它们存在时间上的因果关系C1→C2,则在所有结点上,C1都在C2之前执行;③意愿一致性(intentionpreservation)任意两个操作C1,C2,若它们相互独立C1‖C2,则它们在任何结点上以任何顺序执行的结果都应与其在本地执行的预期结果一致。
基于状态向量的时间戳(State Vector based timestamp),已经被广泛用来判别操作间的因果顺序(Causal Relationship)。一个实际戳是一个向量,向量的每一维表示一个站点,而向量中这一维上的值表示已经执行了这个站点中的操作的数量。由于来自同一个站点的操作都是顺序执行的,于是一个时间戳可以表示在该时间戳的状态下已执行了哪些操作,如果一个时间戳中所有已执行的操作都包含在另一个时间戳的已执行操作中,则两个时间戳满足因果关系,否则是并发关系。在时间戳模式中,每个站点都会有它自己的状态向量,每个操作产生之后都会连同当前站点的时间戳一同广播。
为了清楚地描述,我们称操作产生的那个数据副本为操作的本地副本,而其它的数据副本为操作的异地副本。我们称该操作为本地副本的本地操作,异地副本的异地操作。
一篇XML文档可以表示为一颗有根树,树的节点是有序的,且每个节点都有相应的Label。一个XML文档的例子可以表示为<Root>
<node@name="A">
<attr>2</attr>
<value>D</value>
</node>
<node@name="B">
<attr>3</attr>
</node>
<node@name="C">
<attr>3</attr>
</node>
</Root>
一个XML文档可以模型化为一颗节点标记树,有三类节点(1)元素节点,每个节点对应一个标签,就像上例中的“node”和“attr”等。在节点标记树中,元素节点对于的标记就是节点的标签。(2)属性节点,对于XML中的值,例如上例中的“@name”,与元素节点的区别是,属性节点不存在嵌套且顺序无关。(3)值节点,值节点对应XML文档中的值,例如上例中的“2”,“3”等。节点标记树中的边表示了元素节点、属性节点、值节点间的结构关系。节点标记树中的元素节点、属性节点、值节点都可以抽象为一般性树节点。上例中的XML文档可以表示图1。
一个XML的Query操作可以表示为XQuery标准,XQuery表示为FLWR(For-Let-Where-Return),XQuery查询过程可以分为两部分FLW定义的twig patternmatching过程,和R(Return)定义的result construction过程。FLW过程首先得到了一个sub-tree,然后R(Return)过程将其re-construction并返回。XQuery的返回结果仍然是一个set,set中的每个元素都是被re-construction之后的sub-tree。
一个XML的Update操作还没有标准,可以扩展XQuery得到一种FLWU(For-Let-Where-Update)的表示方法。于是与XQuery类似,FLWU可以分为独立的两个步骤首先由FLW过程得到多个sub-tree,然后U(Update)过程修改每个sub-tree中对应的XML文档的相应的nodes。对于Update操作,我们要求操作的执行要取得操作中所有的限制条件,然后再实际进行修改。
存在多个XML副本的环境,我们希望对用户是透明的。用户看到的只有他当前访问的那个XML副本。对于副本环境,假设一个Query操作和一共Update操作是并发的,在用户看来,一个Query操作与一个Update操作以任何顺序的执行都是可以接收的,即这个Query操作是否包含Update操作的内容都是可以的。于是对于多副本环境,考虑一个副本收到用户的一个Query操作,可以立即执行并返回结果,而无需考虑是否在此之前有其它并发操作执行,即Query操作不会与其它操作构成并发关系。在多副本环境下,我们只需要考虑Update操作的并发情况。
由于并发操作的存在,当本地站点收到一个异地Update操作的时候,XML文档的状态可能已经发生变化,操作无法立即执行。状态转换(State Transformation)通过转换XML文档的倒排索引表的状态,首先回溯(Retrace)XML文档的倒排索引表到每个操作产生时的状态,在转换后的倒排索引表中,XML节点的索引结构与操作产生时的位置表示是一致的,操作可以立即在新的倒排索引表中得到相应的执行集以执行,操作执行之后可以恢复倒排索引表,以准备下一个操作的执行。
在时间戳模式下,保证因果一致性(Causality Preservation)只需要保证一个站点执行一个异地操作满足操作的执行条件即每个操作都有在保证因果顺序的情况下执行。但是即使满足操作的因果顺序,在不同的站点间操作到达的顺序不同,执行的顺序仍然会有所不同。我们只需要在一个操作满足操作的执行条件的时候,保证它满足收敛性(Convergence)和意愿维护(Intention Preservation)。
本发明提出的面向XML的标记回溯的一致性方法,是构建一个应用程序的一致性维护引擎,该引擎包括程序的控制算法、历史操作记录维护算法、倒排索引表维护算法、回溯算法、操作执行集获取的FLW算法和Update操作执行算法,还包括一个本地的状态向量维护方法和广播方法。整个一致性维护方法分为两部分对本地用户操作的执行,对异地用户操作的执行。对本地用户操作的执行流程为程序执行本地操作,修改状态向量,然后将本地的状态向量作为时间戳附着在操作上,广播给其它用户。对异地用户操作的执行流程为控制算法收到异地用户的操作,当满足执行条件时,根据其附着的时间戳,回溯本地XML数据副本的倒排索引表到其产生时刻,在这个状态上,操作可以通过操作执行集获取的FLW算得到相同的执行集,通过Update操作执行算法得到正确执行,然后恢复倒排索引表以待下一个操作。本发明可以使得多个用户实时地编辑同一XML数据对象,多个用户间不会相互影响,本地操作可以立即响应,本发明会自动处理用户之间的操作冲突,在各个用户间实现数据的一致性维护。
由于并发操作的影响,当程序收到一个远程操作时,XML文档的状态与操作产生时相比已经发生了变化,操作无法立即执行。为了保证操作的正确性和一致性,我们需要将XML文档的倒排索引结构状态首先进行回溯。回溯的过程是按照操作附带的时间戳,依次设置倒排索引结构中,每个被并发操作所涉及的节点,设置节点的内容和有效/无效状态,使倒排索引结构与操作产生时保持一致;在这个倒排索引结构下,操作可以得到相同的执行集,其后的修改过程只需要根据执行集进行,然后修改本地的状态向量,并恢复倒排索引结构以待下一个操作的执行。
下面具体介绍维持引擎中各种算法。
1、程序的控制算法其引擎中的控制算法是对异地用户操作的一个执行流程。具体来说是当收到一个异地用户操作之后,如果操作满足操作的执行条件,则引擎会将操作传送给控制算法执行,控制算法首先根据操作附着的时间戳,调用回溯算法回溯本地XML数据副本的倒排索引表到其产生时刻,通过操作执行集获取的FLW算得到操作的执行集,然后根据操作类型执行该操作,操作执行完成之后根据本地的状态向量维护方法修改本地的状态向量,最后恢复本地XML数据副本的倒排索引表以待下一个操作的执行。
假设当前站点为R,其状态向量为SVXMLDoc,对应的文档为XMLDoc,一个异地操作0,操作0的时间戳为SVO,且满足操作的执行条件,则程序控制算法在站点R的执行过程的流程如下
一个异地无法直接执行,是因南其它并发操作修改了XML文档的状态。一个Update操作执行的效果决定于FLW过程获取的子树的集合,即它的执行集,而Update操作的U(Update)过程仅仅遍历得到的执行集进行相应的修改。于是为了保证Update在所有的XML副本都得到相同的结果,我们需要保证Update操作的FLW过程得到与其在本地副本上相同的执行集。当操作要在一个异地副本上执行时,我们通过隐藏异地XML副本中其它并发操作造成的影响,将XML文档状态回溯到待执行的操作,其产生时的本地副本的XML状态,我们称这个过程为状态转换(ST,State Transformation)。文档进行ST之后,Update操作的FLW过程可以在上面获得与其在本地副本上执行时相同执行集,于是也就保证了操作结果的一致性。
2、历史操作记录维护算法引擎中的历史操作记录维护算法,是根据操作附带是时间戳,判断操作在所有站点的执行状态,维护所有未完全在全部站点执行的操作,当操作在所有站点执行完成后,才在历史操作记录中删除。
在回溯过程中,只有并发的操作才会对回溯过程产生影响。而当一个操作在所有站点均已经被执行之后,就不会再与其它操作构成并发关系了。为了处理回溯过程,我们只需要维护那些尚未曾再所有站点执行的操作。由于采用了基于向量的时间戳,我们也使用State Vector Table(SVT)的方法进行判断。操作存储在历史操作记录中(OperationHistory List)中,每次收到新的异地操作,都通过其附带的SV更新SVT,并更新OHL。如图2所示。
3、倒排索引表维护算法引擎中的倒排索引表维护算法,是为本地的XML数据副本构建一个倒排索引表,建立每个XML节点内容与节点Label之间的一个关联关系,知道一个确定性的内容,可以迅速检索到所有内容相同的节点,然后通过它们之间的Label比较,可以判断节点间的祖先、后代关心。倒排索引表维护算法还维护了历史操作记录中每个操作与其所涉及节点间的关联关系。
无论是Query操作还是Update操作,其核心都是FLW过程,而FLW过程的核心是树模式匹配。为了处理树模式匹配,我们需要快速地检索到XML文档中的相应节点。本文采用了native XML query的处理方法,通过维护所有XML节点的倒排索引表,如图2。通过倒排索引表可以快速检索FLW过程中设计的节点(元素/属性/值),再通过连接过程匹配FLW中的各种轴关系,将其组合,最后得到的子树集合。XML文档状态的所有变化,都会反映在它的倒排索引表中。为了加速回溯过程,我们对于OHL中的每个操作,都维护这个操作所涉及的节点在倒排索引表中的索引,如图2。
当一个XML副本收到一个异地操作,首先将其添加到OHL中,然后虚拟执行这个操作,根据其FLW过程得到的执行集,将执行集中所涉及的节点在倒排索引表建立索引。插入在倒排索引表中插入节点,也将节点插入到XML文档中。但删除仅仅是将倒排索引表中的节点做删除标记,而不实际修改XML文档。回溯过程只需要遍历这个索引表,隐藏所有并发操作的影响,而无需遍历整个XML或者重新执行这些操作了。
当使用SVT的方法可以判断OHL中的一个操作已经在所有的站点中执行后,我们可以将这个操作实际执行。即在倒排索引表中,实际删除所有这个操作要删的节点,并删除操作在倒排索引表上的索引结构。最后在OHL中删除这个操作。当一个需要实际执行的删除操作的节点,在其它OHL中的操作也有涉及,我们都只需要删除节点的同时,也删除所有指向这个节点的索引就可以了。由于SVT方法已经标明这个操作在所有站点均已经执行,故不再有其它操作与此操作并发,故删除此节点不会对后续的回溯操作产生影响,而无论当前OHL中其它操作对这个节点进行怎样的处理,最终的效果也只是删除该节点。
当倒排索引表中的一个节点被OHL中一个操作涉及时,会建立一个操作到节点的索引结构,我们称它被OHL中一个操作连接。对于这个节点,我们同时建立一个re-linked列表,记录它被OHL中哪些操作同时涉及,也记录该操作对当前节点的修改类型(Insert/Delete/Update及相应内容)。由于即使同一个操作,对多个涉及到的节点也会有不同的修改,当有了re-linked列表之后,无论是回溯过程也好,还是U(Update)过程的执行也好,对一个节点的处理,只需要遍历这个节点的re-linked列表就足够了。
4、回溯算法引擎中的回溯算法,是根据指定的时间戳,回溯本地XML数据副本的索引表结构,回溯算法考察历史操作记录中每个操作在XML数据副本索引表中的涉及到的对象节点,对于其中某个对象节点,考虑所有针对这个对象节点的操作,设置内容记录器,查询这个对象节点上所有因果前继的操作中TOrder函数值最大的一个操作的内容,最后如果内容记录器的最终结构与初始结果不同,则在倒排索引表中构建一个虚拟的节点,并且将原节点设置为无效。回溯算法可以将XML数据的倒排索引表回溯到指定操作产生时的状态。
设站点R的文档线性结构表示成XMLDoc,其中R的状态向量表示为SVR,设任意一个满足因果顺序的时间戳为SVO,则回溯过程可以表示成如下流程 回溯的目的是隐藏OHL中与当前待执行的操作的其它并发操作的影响,保留其它与该操作构成先序关系的操作的影响,将XML的文档状态回溯到该操作在其本地副本执行时的状态。回溯过程只需要遍历那些与当前操作并发的操作在倒排索引表中所涉及的节点。因为只有这些节点才能发生改变。
我们把操作归结为insert/delete/update三类,如果一个涉及到的节点,是由一个并发操作插入的,则回溯之后,插入是无效的,这个节点应标记为无效;如果一个涉及到的节点,所有针对这个节点的delete操作均为并发操作,而插入又是有效的,则节点应标记为有效。对于Update,多个操作同时Update一个节点时会构成冲突,我们希望保留所有不冲突的部分,在执行过程中,冲突的节点采取Multi-Version/Single Display(MVSD)的处理策略,这一点将在后面具体讨论。于是回溯得到的结果,应该为所有非并发操作在MVSD策略下结果,如果结果与原始的节点不同,为了FLW过程,需要在倒排索引表中根据得到的结果建立一个虚礼的节点。
算法中的TOrder函数,我们具体在U(Update)过程中介绍。因为可能有OHL中多个操作涉及同一个节点,我们通过记录节点是否被当前的回溯操作访问过,保证每次回溯中,重复涉及的节点之访问一遍。我们只处理那些并发的操作,且只重复一遍相同的节点,所以效率还是很高的。
5、操作执行集获取的FLW算法引擎中的操作执行集获取的FLW算法,是对于一个异地用户的Updae操作,在所有数据副本上都可以得到一个统一的执行集。一个Updae操作可以拆分成FLWU四个过程,而U(Update)过程的内容取决于之前FLW过程中的到的执行集。一个异地用户操作执行前,先通过回溯算法将本地XML数据副本的倒排索引表回溯到这个异地操作产生时的状态,然后操作执行集获取的FLW算法通过考虑回溯过程的结果,可以得到相同的执行集。
一个复杂的FLW过程可以分解为多个祖先、后代关系的查询。我们改进了Stack-Tree-Desc的方法,使其可以支持回溯过程中得到的标记,它与原有算法的区别在于它会考虑回溯过程中对并发操作效果的隐藏。算法可以描述为
另一方面,由于XML变动的过程也需要同时修改相应的节点Label。为了支持XML的修改,我们使用了预留空间的start/end表示的range编码。
6、Update操作执行算法引擎中的Update操作执行算法,是对于一个异地用户的Update操作,在得到操作的执行集后,可以得到相同的执行结果。由于存在多个并发操作,操作间可能存在冲突,Update操作执行算法采用Multi-version/Single-display策略处理所有的冲突节点,对于所有冲突节点上的操作,选取TOrder函数值最大的一个操作的内容来显示,从而得到统一的显示版本。
多个Update操作可能会产生冲突,ST的方法希望尽可能地保留用户Update操作的效果。两个并发操作同时在同一位置插入节点,我们保留两个插入结果;两个并发操作同时删除一个节点,我们只需删除这个节点;只有当两个并发操作同时修改一个节点时,我们认为这两个操作产生了冲突。由于一个update操作在产生冲突的同时也在修改多个其它的节点,对于不冲突的部分,我们希望保留两个操作各自的结果。仅仅对于冲突的部分节点,我们采用Multi-Version/Single-Display(MVSD)的策略。我们复制所有的冲突节点,然后通过TOrder函数选取TOrder值最大的操作的内容显示,如图3所示。MVSD的应用仅仅在冲突节点上,这使我们可以尽可能地保存了操作的效果。
为了两个插入操作能够进行比较,我们定义Torder函数,用来表示两个插入字符的左右关系,TOrder()较小的在左侧。考虑两个操作Oa和Ob,它对应的操作分别产生自站点a和b,并且时间戳分别为SVa和SVb,则TOrder(Oa)<TOrder(Ob),当且仅当(1)sum(SVa)<sum(SVb);或者(2)当sum(SVa)=sum(SVb)时a<b,其中sum(SV)=Σi=0N-1SV[i].]]>即Torder函数规定了操作间的全序关系(Total ordering),对于两个操作,Torder函数可以给出两个操作的大小关系。Torder函数具有传递性(Transitivity),且任意两个操作可比。则操作的执行过程如下
本地的状态向量维护方法,用以维护本地的状态向量。在一致性维护方法中,通过本地的状态向量可以判断哪些操作已执行。状态向量记录了来自不同站点的操作执行的数量,当一个新的操作被执行后,就将该站点的操作执行数量加一,并更新本地的状态向量。
引擎中的广播方法,是将一个本地的用户操作通知给所有其它的用户,因为本地的状态向量可以判断哪些操作已执行,同样也表示了这些操作与新执行的本地操作满足因果关系,于是广播方法将该状态向量作为操作的时间戳一同通知给其它用户,可以让其它用户知道该操作执行是的数据副本的状态。


图1为节点标记树。
图2为历史操作记录,倒排索引表和XML文档节点Label。
图3为Multi-Version/Single-Display。
图4为操作的产生和执行顺序。
图5为操作的执行过程。
具体实施例方式
下面结合一个例子进一步详细介绍本发明方法。该例子描述了面向XML的标记回溯的一致性维护引擎的处理过程。
假设一个系统拥有两个用户U1和U2,U1和U2为并发操作,初始的XML文档如下面所示。操作的产生和执行顺序如图4所示。U1希望在子节点含有值“3”的sub-tree中插入一个新的节点“D”,U2希望将考察以Node的name为“B”的sub-tree,将sub-tree的子节点的attr“3”修改为“2”。
<Root>
<node@name="A">
<attr>2</attr>
<value>D</value>
</node>
<node@name="B">
<attr>3</attr>
</node>
<node@name="C">
<attr>3</attr>
</node>
</Root>
其中操作U1为FOR $node in/root/node,$attr=$node/attrWHERE $attr="3"UPDATE $node {INSERT<value>D</value>
}其中操作U2为FOR $node in/root/node,$name=$node/name,$attr=$node/attrWHERE $name="B"UPDATE $node{REPLACE $attr WITH<attr>2</attr>
}两个操作首先均在其本地副本被立即执行,然后传输到其它的异地副本。我们的目标是操作在异地副本执行时可以得到与其本地副本相同的执行效果。U1在其本地副本分别对“B”和“C”为根的sub-tree分别插入了一个子节点“D”,但是在SR2,由于执行了U2,U1到达后直接执行的话,只会在以“C”为根的sub-tree插入子节点“D”,无法得到与其本地副本相同的执行结果。如图5的上部所示。
为了得到与其本地副本相同的执行结构,需要首先对XML文档进行状态转换(StateTransformation),即回溯XML文档的倒排索引表到异地操作产生时的状态。首先,当U1到达时,已经满足执行条件,故可以直接在ST中执行,执行过程首先进行回溯操作。回溯过程会考虑OHL中的操作,此时OHL中只有一个U2操作,而操作U2涉及的XML节点为Label为<0.53,0.57>的attribute属性节点。回溯过程先将这个属性节点标记已访问。attribute属性节点此时也只被一个U2操作所修改,修改类型是Update,此时Value为操作U2的内容,而操作U2是操作U1的并发操作,则attribute属性节点上,所有非并发操作构成的结果即为attribute属性节点的初始内容,于是回溯算法将attribute属性节点的值回溯为“3”,相应地,倒排索引表中attribute属性节点的位置也会发生变化,我们在“3”的索引链表中加入Label为<0.53,0.57>的一个虚拟节点,该虚拟节点的值即为“3”。如图2所示。
回溯过程完成后,XML文档的倒排索引表已经恢复到操作U1产生时的状态,如图5的右部所示。显然操作U1在这个状态下执行,其FLW过程会得到“B”和“C”为根的两个sub-tree,即操作的执行集,操作在这个执行集下执行U(Update)过程,可以得到与其在本地副本相同的执行结果。操作执行完成之后,可以取消所有回溯操作的影响,以待下一个操作的执行,如图5的下部所示。
权利要求
1.一种面向XML的标记回溯的一致性维护方法,其特征在于构建一个应用程序的一致性维护引擎,在该引擎中包括程序的控制算法、历史操作记录维护算法、倒排索引表维护算法、回溯算法、操作执行集获取的FLW算法、Update操作执行算法一个本地的状态向量维护方法和广播方法,整个一致性维护方法分为两部分对本地用户操作的执行,对异地用户操作的执行;对本地用户操作的执行流程为程序执行本地操作,修改状态向量,然后将本地的状态向量作为时间戳附着在操作上,广播给其它用户;对异地用户操作的执行流程为控制算法收到异地用户的操作,当满足执行条件时,根据其附着的时间戳,回溯本地XML数据副本的倒排索引表到其产生时刻,在这个状态上,操作可以通过操作执行集获取的FLW算得到相同的执行集,通过Update操作执行算法得到正确执行,然后恢复倒排索引表以待下一个操作。
2.根据权利要求1所述的一致性维护方法,其特征在于所说的程序控制算法是对异地用户操作的一个执行流程,当收到一个异地用户操作之后,如果操作满足操作的执行条件,则引擎会将操作传送给控制算法执行,控制算法首先根据操作附着的时间戳,调用回溯算法回溯本地XML数据副本的倒排索引表到其产生时刻,通过操作执行集获取的FLW算得到操作的执行集,然后根据操作类型执行该操作,操作执行完成之后根据本地的状态向量维护方法修改本地的状态向量,最后恢复本地XML数据副本的倒排索引表以待下一个操作的执行;所说的历史操作记录维护算法,是根据操作附带是时间戳,判断操作在所有站点的执行状态,维护所有未完全在全部站点执行的操作,当操作在所有站点执行完成后,才在历史操作记录中删除;所说的倒排索引表维护算法,是为本地的XML数据副本构建一个倒排索引表,建立每个XML节点内容与节点Label之间的一个关联关系,知道一个确定性的内容,可以迅速检索到所有内容相同的节点,然后通过它们之间的Label比较,判断节点间的祖先、后代关心;所说的回溯算法,是根据指定的时间戳,回溯本地XML数据副本的索引表结构,回溯算法考察历史操作记录中每个操作在XML数据副本索引表中的涉及到的对象节点,对于其中某个对象节点,考虑所有针对这个对象节点的操作,设置内容记录器,查询这个对象节点上所有因果前继的操作中TOrder函数值最大的一个操作的内容,最后如果内容记录器的最终结构与初始结果不同,则在倒排索引表中构建一个虚拟的节点,并且将原节点设置为无效,回溯算法将XML数据的倒排索引表回溯到指定操作产生时的状态;所说的操作执行集获取的FLW算法,是对于一个异地用户的Update操作,在所有数据副本上得到一个统一的执行集;一个Update操作可以拆分成FLWU四个过程,而Update过程的内容取决于之前FLW过程中的到的执行集;一个异地用户操作执行前,先通过回溯算法将本地XML数据副本的倒排索引表回溯到这个异地操作产生时的状态,然后操作执行集获取的FLW算法通过考虑回溯过程的结果,可以得到相同的执行集;所说的Update操作执行算法,是对于一个异地用户的Update操作,在得到操作的执行集后,得到相同的执行结果Update操作执行算法采用Multi-version/Single-display策略处理所有的冲突节点,对于所有冲突节点上的操作,选取TOrder函数值最大的一个操作的内容来显示,从而得到统一的显示版本;所说的本地的状态向量维护方法,用以维护本地的状态向量,状态向量记录了来自不同站点的操作执行的数量,当一个新的操作被执行后,就将该站点的操作执行数量加一,并更新本地的状态向量;所说的广播方法,是将一个本地的用户操作和本地状态向量作为操作的时间戳通知给所有其它的用户,让其它用户知道该操作执行是的数据副本的状态。
3.根据权利要求2所述的一致性维护方法,其特征在于假设当前站点为R,其状态向量为SVXMLDoc,对应的文档为XMLDoc,一个异地操作O,操作O的时间戳为SVO,且满足操作的执行条件,则程序控制算法在站点R的执行过程的流程如下Procedure 1控制算法(XMLDoc,O),在XMLDoc上执行一个异地操作O。考虑O的本地副本为R,O的时间戳为SVO,当前XML数据副本的状态向量为SVXMLDoc1while如果O不满足执行条件do2等待,直到收到另一个异地操作3Retracing(XMLDoc,SVO)4调用FLW(XMLDoc,SVO),来获取执行集ES5恢复所有Retrace过程的效果6调用U(XMLDoc,O,ES)7SVXMLDoc[R]⇐SVXMLDoc[R]+1]]>
4.根据权利要求2所述的一致性维护方法,其特征在于设站点R的文档线性结构表示成XMLDoc,其中R的状态向量表示为SVR,设任意一个满足因果顺序的时间戳为SVO,则回溯过程可以表示成如下流程Procedure 2 Retracing(XMLDoc,SVO),将XMLDoc倒排索引表的状态回溯到SVO的时刻1for all对于OHL中与SVO并发的操作O′do2 for all倒排索引表中被O′涉及的节点N do3if N没有被访问过then4 将N标记为已访问5 for all在N的re-linked操作序列中的操作O″do6 if O″是N上的一个Insert操作,且与SVO非并发then7将N标记为有效8Value⇐O′′]]>的内容,SVValue⇐SVO′′]]>9 if O″是N上的一个Delete操作,且与SVO非并发then10 将N标记为无效11if O″是N上的一个Update操作,与SVO非并发,且TOrder(SVO″)>TOrder(STvalue)then12Value⇐O′′]]>的内容,SVValue⇐SVO′′]]>13 end for14 if N的内容与Value不同then15 将N标记为无效16 为新的内容Value建立一个虚拟节点N′17 将N′标记为有效18end if19 end if20end for21 end for
5.根据权利要求2所述的一致性维护方法,其特征在于所述的操作执行集获取的FLW算法的流程如下Function 3 State-Join(AList,DList),AList是可能的祖先序列,按StartPos排序。DList是可能的后代序列,按StartPos排序1a⇐AList→firstNode,d⇐DList→firstNode,]]>OutputList⇐NULL]]>2 while输入序列非空或栈非空do3if a.StartPos>stack→top.EndPos且d.StartPos>stack→top.EndPos then4 stack→pop()5 else if a.StartPos<d.StartPos then6 stack→push(a)7 repeat8a⇐a→nextNode]]>9 until a是最后一个或者a有效10 else11for all栈中的节点a′do12 将(a′,d)输出13repeat14d⇐d→nextNode]]>15until d是最后一个或者d有效16 end if17end while
6.根据权利要求2所述的一致性维护方法,其特征在于所述的Update操作执行算法的流程如下Procedure 4U(XMLDoc,O,ES),根据执行集ES来执行操作O的U过程,假设XMLDoc中每个节点当前的内容是有一个操作产生,它的状态向量为STCurent1for all ES的子树st do2 if O要在st中插入一个节点then3 通过Range-Scan函数插入它4 if O要在st中删除一个节点then删除它5 if O修改了st中的一个节点,且TOrder(STO)<TOrder(STCurrent)then6将节点的内容更新为O7STCurrent⇐STO]]>8根据这个节点新的内容,调整它在倒排索引表中的位置9 end if10end for
7.根据权利要求2所述的一致性维护方法,其特征在于所述的TOrder函数规定了一个操作间的全序关系,对于两个操作,TOrder函数给出两个操作的大小关系,TOrder函数具有传递性,且任意两个操作可比。
全文摘要
本发明属于计算机支持的协同工作技术领域,具体是一种面向XML的标记回溯的一致性维护方法。包括程序的控制算法、历史操作记录维护算法、倒排索引表维护算法、回溯算法、操作执行集获取的FLW算法和Update操作执行算法。还包括一个本地的状态向量维护方法和广播方法。整个一致性维护方法分为两部分本发明可以使得多个用户实时地编辑同一XML数据对象,多个用户间不会相互影响,本地操作可以立即响应。本发明会自动处理用户之间的操作冲突,在各个用户间实现数据的一致性维护。
文档编号G06F17/30GK1845076SQ200610026459
公开日2006年10月11日 申请日期2006年5月11日 优先权日2006年5月11日
发明者顾宁, 杨江明, 张琦炜 申请人:复旦大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1