Xml文档的聚类方法和系统的制作方法

文档序号:6428265阅读:261来源:国知局
专利名称:Xml文档的聚类方法和系统的制作方法
技术领域
本发明通常涉及XML文档的聚类,尤其涉及以单遍工作量负荷完成的XML文档的聚类。
背景技术
下面提供的一系列参考文献与本发明相接近;其中的各个参考文献以括弧中的缩写(即[FK99],[TN91],等等...)的方式来引用。
当前的数据库或数据仓库系统使用两个主要的方案来存储XML文档。第一种方案将XML文档映射到关系表,关系表中的每行表示文档的(抽象)XML树中的一个边[FK99]。通过现有的关系操作符来实现对存储文档的XML处理。第二种方案,即原生XML存储(Native XML Storage)将文档视为XML树。它将XML树划分成不同记录,这些记录包含不相交连接的子树[KM00]。接着以未解析的文本形式,或使用某种内部表示,在盘页面中存储这些记录。
对于支持用于通过链接(指针)遍历在数据项之间进行导航的操作符的数据库系统,相关数据项的聚类在物理布置数据方面是有益的。这里,如果2个节点通过链接相连,则它们是相关的,并且检查它们中的一个很可能不久导致检查另一个。例如,已经表明,数据聚类对于例如IBM的IMS的层次数据库[Sch77],及对于面向对象的数据库(OODB)[TN91,TN92,GKKM93]是有效的。
通常使用例如XSLT、XPath或XQuery的查询语言处理XML文档[WC3]。这些语言使用XPath导航操作符遍历抽象XML树的路径。在原生XML存储系统中,这导致在类似于层次或面向对象数据库中的记录的所存储的XML记录上的导航。实际上,通常通过路径索引辅助这种遍历,这些路径索引减少了所存储记录上的路径导航的数量。然而,由于XML查询模式通常是比较复杂的,并且维护多个路径索引以覆盖整个XML文档的代价也是昂贵的,因此路径索引不能完全消除这种路径遍历。此外,许多处理模式使用延迟的访问,并且由于数据可能已经更新,而会需要附加的遍历以便重新生效。最后,一般物理布局模式能够将XML节点分散在许多记录上。对于这种物理布局,类似预取或缓冲的常规I/O优化技术对于复杂XML查询可能是无效的。因此,将相关XML节点聚集在一起并且将它们存储在相同盘页面中,尤其是对于较大的XML文档,是有益的。由于盘页面具有有限的容量,所以不是所有的相关XML节点都能够容纳在单个盘页面中。因此,需要决定如何向盘页面分配相关XML节点。OODB中对象的聚类和相关XML节点的聚类之间的关键差别在于,在OODB中可根据其类规格事先得知对象的大小,而对于XML文档,在没有XML模式的情况下,是在对其进行分析之后才知道节点大小。即使在XML模式可用时,也仅在运行时刻才知道文本节点的大小。
将相关XML节点分配到盘页面的问题可被视作树分区问题。要分区的树是聚类树,即增加有节点和边权重的XML树。概括地讲,边权重模拟XML导航行为(边权重越高,则意味着相连的XML节点更强烈地″相关″)。节点权重是XML节点的(文本)大小。问题是将聚类树的节点集合划分为节点不相交子集(称作聚类),使得一个聚类导出一个相连接的子树,每个聚类均适合一个盘页面,并且聚类内部边的总权重(称作分区的值)最大。反之,聚类间边的总权重(分区的代价)最小。直观上,分区的值越高,则意味着盘访问越少。
对于树分区问题的一个广为接受的方案是Lukes的基于动态规划的树分区方法[Luk74]。这一方法以自底向上的方式对树进行操作,并且使用将逐渐增大的子树分割成分区集合的迭代过程。每个分区是一组非不相交聚类,每个聚类满足总权重限制(即盘页面大小)。对于每个子树,并且对于每个可行的聚类权重,Lukes的方法寻找具有最大值的分区。当被分区的子树是整个树本身时,该方法完成。最终获得的分区是整个树的具有最大值的分区。然而,Lukes的方法需要过多的存储器和运行时间,这是由于动态规划的结果。于是,需要改进Lukes的方法。

发明内容
根据本发明的至少一个当前优选的实施例,概括地考虑了一种用于以单遍工作负荷完成的XML文档聚类的系统和方法。
概括地讲,本发明的一个方面提供了一种用于对XML文档进行聚类的系统,该系统包括用于按节点分析XML文档的装置;用于初始化至少一个所分析的节点的装置;用于对至少一个所分析的节点进行分区的装置;和用于处理至少一个所分析的节点的装置。
本发明的另一个方面提供了一种用于单遍地对XML文档进行聚类的系统,该系统包括用于按节点分析XML文档的装置;用于确定至少一个所分析的节点的XPath工作遍历的装置;用于对至少一个所分析的节点进行聚类的装置;和用于向页面分配至少一个聚类的装置。
本发明的另一个方面提供了一种用于对XML文档进行聚类的方法,该方法包括步骤按节点分析XML文档;初始化至少一个所分析的节点;对至少一个所分析的节点进行分区;和处理至少一个所分析的节点。
此外,本发明的另一个方面提供了一种机器可读的程序存储装置,其有形地体现一种指令程序,该程序可被机器执行以实现用于对XML文档进行聚类的方法步骤,所述方法包括步骤按节点分析XML文档;初始化至少一个所分析的节点;对至少一个所分析的节点进行分区;和处理至少一个所分析的节点。
为更好地理解本发明及其它和进一步的特征和优点,参考以下结合附图进行的说明,在所附权利要求中指出了本发明的范围。


图1示出了XML树和相应的聚类树;图2示出了根据本发明的通用XML聚类系统的方框图;
图3以图形方式示出了本发明的接近线性的特性;图4以图形方式针对各种单个的查询工作负荷示出了聚类的缺页情况;图5以图形方式针对各种组合的查询工作负荷示出了聚类的缺页情况;图6是本发明的方法的流程图;图7是根据本发明的图6所示的初始化单元的操作的流程图;图8是根据本发明的图6所示的分区单元的流程图;以及图9是根据本发明的图6所示的后处理单元的流程图。
具体实施例方式
本发明的一个实施例是树分区方法XC,它用于对较大的静态XML文档进行聚类。在本发明的另一个实施例中,XC优选被集成在具有SAX分析器和边权重指派器(使用显式权重或根据公布的工作负荷说明导出权重)的系统中,其中工作负荷是固定的。该系统在操作时产生包含XML文档的完成节点的聚类树。如下所述,XC使用各种仅保留在将来能够有用的那些聚类和分区的技术,并且尽快释放所有其余的数据结构。
本公开现在讨论XC的关键特征。为了进行讨论,将使用图1(a)中说明的简单XML树。图1(b)示出了相应的聚类树(具有节点和边权重)。聚类树是增加有均为整数的节点和边权重的XML树。节点权重是XML节点的(文本)大小,而边权重模拟将节点放置到相同聚类中的重要性。
本发明的方法优选地用于将介质划分为大规模的XML树(兆字节到千兆字节)。对于大型XML树,多数应用只能在存储器中保存部分的XML树。此外,通常按照文档顺序单遍地分析XML文档,其中每个XML数据节点只被扫描一次。这对XC强制实行隐含的调用顺序。不同于Lukes的方法,XC按照自底向上、自左到右的顺序处理树节点。例如,对于图1(a)中示出的树,本发明的方法按照以下节点顺序处理节点3、2、5、4、8、7、10、9、等等。在执行期间的任意时刻,XC仅在存储器中保存XML树的一个片段。该片段是迄今已扫描的XML文档的部分的子树。XC没有关于文档的其余尚未扫描的部分的信息。所以,在每一步骤,XC单纯根据从已扫描的XML节点获得的信息做出决定。
类似于Lukes的方法,XC也对聚类树进行操作。一旦XC完全处理了聚类树的一个子树,该子树即被称作已处理子树(并且其根被称作已处理节点)。XC为一个子树计算一组分区,其中每个分区是一组不同的聚类。按照聚类的成员节点的权重的总和来计算聚类的权重。包含被分区子树的根的聚类被称作中枢聚类,并且其权重被指定为该分区的权重。考虑图1(a)的样本XML树1.节点3(具有数据12345)是具有完全扫描子树(包含其本身)的第一个节点。XC现在调用Lukes的方法的叶处理步骤,并且初始化用于节点3(叶)的结构。一旦经过处理,以节点3为根的子树被转换成只包含一个节点(节点3)的已处理子树及其相关分区,该分区包含其权重与节点3的权重相等的单个聚类(3)。
2.节点2是具有完全扫描子树的下一节点(包含其本身和节点3)。XC现在对该子树的根节点2执行Lukes的方法的内部结点处理步骤。类似于Lukes的方法,内部循环在子节点(只有一个,即节点3)上进行迭代,并且产生中间分区。一旦经过处理,以节点2为根的子树被转换成只包含一个节点(节点2)的已处理子树及其相关分区。应当理解,本发明中是根据一般已知的方法,即合并和连接的方法创建分区。对于通过合并和连接创建分区的一般讨论可参见[Luk74]。
本公开现在讨论使用权重区间的动态规划。在处理具有节点权重w≥1的节点时,Lukes的方法检查其权重为从w到权重边界W的所有可能分区。这导致O(n W)空间复杂度和O(n W2)时间复杂度。这对于其中n的值可能上百万(XML节点)并且W可能上千(字节)的较大XML文件是禁止的。为解决此问题,本发明的方法将(1,W)的权重范围划分成大小相等的权重区间,并且对于每个权重区间,仅使一个分区与之相关。由应用使用块大小参数来指定权重区间的数量。块大小的值(表示为C)可以从1变化到W,并且是W的约数。在所考虑的其权重落在该区间内的分区中,每个权重区间的相关分区具有最大值。所以,对于XC,在Lukes的方法[Luk74]的内部结点处理之后,最多有Wc=W/C个与该节点相关的中间分区。类似地,内部循环在从1到Wc的权重区间上进行迭代。这些修改将空间复杂度降低到O(n Wc),并且将时间复杂度降低到O(n Wc2)。这种权重区间逼近技术仅用于将中间分区放置到适当区间中。对是否合并聚类的判定仍然是根据实际的聚类权重(而不是区间)。
例如,当对包含节点2和3的聚类子树调用Lukes的方法时,创建了2个中间分区。通过连接包含节点2和3的聚类而创建具有权重4和值0的第一分区p42。通过合并包含节点2和3的聚类而创建具有权重9和值20的分区p92。如果W=10并且块大小=10,则Wc=1并且p42和p92落在单个权重区间内,所以只保留较高值p92。如果W=10并且块大小=5,则Wc=2,并且保留这两个分区。如在Lukes的方法中那样,一旦子树被处理,则可以丢弃该子树根的所有子节点(并且释放存储器)。
检查边界情况C=1和C=W是有益的。当块大小=1时,本发明的方法完全如Lukes的方法那样进行操作;它也寻找一个最优分区。当块大小=W时,每个节点只产生一个中间分区。换言之,XC按简单的“贪心”算法进行操作。如果可能,它简单地合并其当前分区的中枢聚类和子节点的中枢聚类,添加其他的子聚类,从而产生新的(和更加有价值的分区)。否则,它简单地合并该节点和子节点的当前分区。
本公开现在讨论就绪聚类(ready clusters)的识别。除权重区间之外,XC也使用其它策略来限制其存储器耗用。第一,设计由XC用来表示节点、聚类和分区的基本数据结构,使得一旦一段逻辑数据不再需要,便能够收回其相应存储器。第二,XC尽快从存储器中移除XML文本数据。Lukes的方法保留可能的结果聚类,直到计算出最终的结果分区。聚类的每个XML节点均承载有相应的XML文本。这导致在存储器中保存整个XML文档等等,直至计算出最终分区。这是完全不切实际的。本发明的方法通过主动检测就绪聚类来解决这个问题。
如果满足以下条件,则与已处理节点x相关的分区中的聚类是就绪的(1)它不包含节点x,因此不能参与任何将来的聚类合并操作,以及(2)它是与节点x相关的每个中间分区的成员,所以将是最终结果分区的成员。一旦处理了以节点x为根的子树,则就能够检测到就绪聚类。接着就绪聚类能够被从中间分区中移除并被传送(带有其XML数据)到页面分配子系统(参见图2)。一旦页面分配子系统向某一页面分配了一个就绪聚类(即其XML数据),则该聚类中包含的XML节点能够和其XML数据一起被删除。这可以导致存储器利用率的显著降低,并且随之改善运行时间。例如,在没有识别就绪聚类的情况下对580KB的XML文档进行聚类会使用2.43MB的存储器,并且花费170秒的时间。当识别出就绪聚类时,相同文档可以在1.2秒内被聚类,并且只需要43KB的存储器。这突显出就绪聚类识别的关键作用。
本公开现在讨论处理存储器限制。虽然本发明使用了降低技术,然而存储器耗用仍然非常巨大,尤其是对于较大的XML文档和较小的块大小值。较大的存储器耗用通常增加(虚拟存储器)缺页情况的数量,因此使性能降级。错误的页面调度特性会使任何方法均不适用于在严格时间限制下操作的应用,例如实时数据流应用。如果仅当存在大量可用存储器时其才能够在某一处运行,则限制了方法的实用性。本发明的方法XC被设计成在指定时间和存储器限制下操作的单遍(流数据)XML应用。块大小参数控制迭代次数,并且还影响存储器耗用。而且,XC应当能够在明确指定的存储器耗用限制下进行操作。
现在描述用于使本发明的基本方法能够有效地遵从存储器限制进行工作的技术。这一技术将就绪聚类的思想扩展到就绪子分区。就绪聚类是将成为最终计算的分区的一部分的聚类。就绪子分区是与(聚类树的)已经处理的子树的根相关的最高值分区,该子树是针对整个聚类树计算的最优近似分区的子集。如果能够识别就绪子分区,则子分区的聚类能够被传递到页面分配子系统,并且能够立即收回相关数据结构,例如XML节点、其文本和聚类的存储器。分区的消除也降低了将来动态规划考虑的选项数量;进一步降低了存储器使用。
通常,在已处理节点x处识别就绪子分区(充分条件是在与x相关的所有分区中,中枢聚类具有权重W)是很难的。而是,当接近存储器限制时,当前优选的方法是简单地将某些子分区声明为就绪的(如下所述)。这一方案急剧降低了存储器耗用。然而这一方案具有一个缺点它影响了准确性,因为在就绪子分区中可能有某些聚类会在将来的聚类合并操作中使用(这会增加最终分区的值)。因此,重要的是选择就绪分区,使得最终结果质量(即价值)不受显著的影响。
一旦处理了一子树,则保留其中间分区,直到其父节点被处理。例如,对于图1(a)中出现的XML树,保留节点7、9和11的中间分区,直到处理了以节点6为根的子树。根据本发明,维护当前多达k个与已处理节点(即其父节点尚未处理的已处理子树的根)相关的最高值分区的长度受限的(参数k,例如k=8)列表HL。这个分区列表仅包含最优分区,使得最优分区的值的总和始终最大。给定存储器限制M,本发明的方法计算用于管理存储器使用的高和低″水位标志″(低<高<M)。当存储器使用超过高水位标志时,触发校正动作;一旦存储器使用到达低水位标志,则恢复正常操作。
当超过高水位标志时,本发明的方法XC从HL中选择具有最高值的分区P。XC接着将这个分区标记为就绪子分区,将其聚类传递到页面分配子系统,并且接着回收相关数据结构的存储器。P还会形成最终结果分区的子集。XC接着移除P与其相关的XML节点vP(即已处理子树的根),并且丢弃vP到其父节点的链接。这个从HL中消除掉最高值分区的过程继续执行,直到存储器使用落到低水位标志之下,或最优分区列表为空。如果存储器使用违反规定的情况持续存在并且最优分区列表为空,则在上述过程中一旦处理了任何子树,其最优分区立即被标记为就绪并且被消除掉。
现在参照图1(a)讨论在存储器使用违反规定期间,本发明的方法的特性。假定在处理文本节点15(INRIA)的同时,存储器使用越过高水位标志。这时,已经处理了以节点2、4和6为根的3个子树,并且它们的最高值分区被存储在HL中。现在考虑相应的聚类树图1(b)。假定在HL中节点6的最高值分区具有最高值,其后跟随的是节点2的最高值分区,接着是节点4的最高值分区。在这种情况下,(与节点6相关的)第一最高值分区被选择为就绪分区,节点6被删除,并且不再是节点1的子节点。如果存储器使用违反规定的情况持续存在,则(与节点2相关的)最高值分区是下一个要被声明为就绪的分区。假定现在存储器使用落在低水位标志之下,则XC恢复正常操作(也就是说直到下一次越过高水位标志为止,保留已处理子树的分区,并且在处理期间如在Lukes的方法中那样使用这些分区)。
试探策略,即将HL中具有最高值的分区P标记为就绪子分区的策略尝试使早先的(与vP相关的)分区消除导致的可能价值损失最小。就绪子分区的声明是在不了解尚待扫描的XML节点的结构和大小的情况下进行的。始终选择最高值分区作为就绪分区的试探算法是一种解决这种不确定性的途径。
本公开现在讨论根据本发明的XML聚类系统。图2说明了XML聚类系统200的体系结构,XML聚类系统200扫描XML文档,将其划分为聚类,并且将这些聚类分配到(盘)页面,而所有这些操作均单遍完成。它包括3个不同的子系统边权重指派器220、树分区240和盘页面分配260。附图中子系统之间的边(210、230、250和270)表示过程调用。边权重指派器使用的应用工作负荷信息通常能够具有不同的形式(例如,统计数据)。
根据本发明,根据这种在其中优选地将XC用作树分区子系统的体系结构来实现XML聚类系统XCS。优选地,使用C++版本的ApacheXerces SAX分析器(参见http//xml.apache.org/xerces2-j/index.html),虽然可以使用任何适当的分析器。(考虑到以流方式向SAX分析器馈送XML文档的情境。)XML聚类系统是其中通过不同SAX事件调用不同功能部件的单个SAX应用。该分析器对每个XML节点仅进行一次扫描,并且创建该节点的存储器内数据结构表示。这种存储器内数据结构存储该XML节点的文本大小,并且充当聚类树的节点。引导到该节点的边接着被传递到边权重指派器。
边权重指派器220使用应用工作负荷信息为聚类树边指派权重。在XCS的边权重指派器中,工作负荷信息包括XPath查询的列表。也可以提供特定XPath查询的例如频率或重要性的附加信息。工作负荷信息也可以包含实际查询的近似;例如,一个参数化的查询可以利用一个访问所有实例的查询来近似。
对于工作负荷中的XPath查询,边权重指派器220优选地使用初级(naive)流式XPath处理器的用于模拟执行的模拟器(这种模拟器能够被任何流式XPath处理器替代)。当前,该模拟器支持以下类型的XPath查询1.从文档根开始的简单路径查询;2.XPath派生或自身(″//″)查询;3.具有位置和路径预测的查询。
另外,该模拟器模拟对查询的子路径使用路径索引的执行。通过适当SAX事件调用模拟器。该模拟器识别会被初级XPath处理器在其实际执行期间遍历的XML节点。为此,该模拟器使用确定性自动机,该自动机在遍历XML链接的同时根据目标节点内容在状态之间进行切换。根据(1)XPath查询的相对重要性/频率,(2)XPath查询中使用的轴和(3)执行计划(即有或者没有使用路径索引),为相应的聚类树边指派权重增量。给予一个聚类树边的总权重是由于每个工作负荷查询而导致的权重增量的总和。
直观上,所指派的权重模拟初级XPath处理器(在时间上)连续遍历该边所连接的节点以及使用该边的事实。边权重越高,则在所连接的节点之间的遍历亲合性便越高。这种亲合性源于经常被遍历,并且/或者经常被″重要的″工作负荷查询遍历。能够扩展边权重指派器220以俘获更加复杂的工作负荷,例如涉及路径联接、或者复杂的预测、XQuery查询和XSL-T模板的XPath表达的特性。不管XML工作负荷和执行计划的类型(即索引或非索引的)如何,所有XML查询均最终被转换成在抽象XML树的边上的遍历。边权重指派器220能够使用高级查询的边遍历信息和频率/重要性来指派适当的边权重。
现在参照附图1示出的XML树,以及包括3个XPath查询及其相对权重的应用工作负荷说明边权重指派器220的执行。
1./bib/book/price202./bib/book/author/affiliation503./bib/book/author[2]/last}30该查询工作负荷遍历的所有的边会被指派反映实际执行的边权重。
假定在工作负荷XPath查询的实际执行期间执行的遍历会在没有使用任何路径索引的情况下执行,则这些XPath查询的相对权重被用于计算查询对边权重的影响。例如,被第一工作负荷查询遍历的边被指派20的权重增量,被第二查询遍历的边被指派50的权重增量,并且被第三查询遍历的边被指派30的权重增量。如果一个边被不止一个工作负荷查询所遍历,则其边权重表示累积的权重。例如,连接节点bib和book的边(0,1)被所有3个XPath查询遍历。因此它会被指派累积的权重100。类似地,连接第二个author节点和book节点的边(1,13)被第二和第三XPath查询遍历。因此这个边会被指派权重80。最后,边(1,20)仅被一个工作负荷查询,即/bib/book/price遍历,并且被指派权重20。
现在考虑当路径索引被用于解决某些工作负荷查询时的情况。例如,考虑关于路径/bib/book/author的索引。这里,连接节点bib和book的2个边被指派权重0(被跳过)。连接节点bib和book的边(0,1)现在只会被第一查询遍历,并且被指派权重20。
一旦边权重指派器220指派了边权重,则由树分区子系统240(在这种情况下为XC)处理聚类树存储器驻留部分。针对endElement()或character()SAX事件,或者在扫描XML属性结束时,调用树分区子系统。于是,XML聚类系统遵循自底向上、自左到右的调用顺序。树分区子系统始终对具有作为其根、刚好完成的XML元素或属性的聚类子树(高度为1)进行操作。根据块大小,XC首先计算子树的不同分区,并且接着检测这些分区是否包含任何就绪聚类。就绪聚类被从所计算的分区中移除并且被传送到页面分配子系统260。无论怎样,都为将来本发明的方法的调用而保留所产生的分区。
为了说明树分区子系统240的调用,考虑图1提供的XML树。首先对节点3调用树分区子系统240,接着对节点2调用树分区子系统240。一旦对以节点2为根的子树进行了分区,则释放节点3的存储器内表示。保留针对以2为根的子树计算的分区,直到节点2作为节点1的子节点再次用在分区过程中。继续执行这个对以x为根的子树进行分区,释放x的子节点,检测就绪聚类和保留分区的过程,直到x为根并且整个树得到分区为止。
页面分配子系统260向页面分配就绪聚类。一旦检测到就绪聚类,便调用该系统。优选地,页面分配子系统260按照就绪聚类权重的降序维护就绪聚类的排序列表。优选地,页面分配子系统260使用单纯根据当前可用就绪聚类的权重进行页面分配决定的在线装箱算法。其工作如下1.一旦当前存储的就绪聚类的总大小超过限制(参数),则选择最重的聚类并且将其分配给页面。
2.使用其他的较小聚类,按照权重的降序尝试填充这个页面,直到达到页面大小限制或所有待决聚类均被检查过。
3.填充后的页面被发送到盘,收回涉及其已分配的聚类的数据结构的存储器。
重复这个过程,直到所有就绪聚类均被映射到盘页面。注意,一旦完成了文档扫描,便启动页面分配子系统以便将所有的其余在存储器驻留的就绪聚类映射到盘页面。
本公开现在讨论使用本发明获得的实验结果。华盛顿大学XML数据仓库提供的若干XML文档(www.cs.washington.edu/research/xmldatasets/)被用于评估本发明的方法。接着对比使用DFS(深度优先存储)的DCS(深度优先聚类系统),评估根据本发明使用本方法的系统。DFS是以深度优先方式分析XML文档的初级聚类算法。参见Tian等人“TheDesign and Performance Evaluation of Alternative XML StorageStrategies(可选XML存储策略的设计和性能评估)”,Association forComputing Machinery SIGMOD Record(计算机协会SIGMOD记录),31(1)(2002年3月),以得到有关DFS的一般性讨论。它以“贪心”方式产生XML节点,其中一旦完成这些XML节点的扫描,便将它们准备好存储到盘页面中。DFS完全忽略边权重。DFS的主要优点是将其处理完成在时间上接近的XML节点放在一起。在两种情况下,XPath查询执行期间缺页情况的数量被用作性能的主要度量。
本发明的方法和Lukes的方法之间的关键差别在于,本发明对权重区间而不是对整个权重范围使用动态规划。根据本发明,通过块大小参数(其决定动态规划区间的数量)来确定权重区间。表1说明了块大小参数的影响。在这个试验中,以权重边界W=4KB对大小为1.97MB并且包含154855个XML节点的XML文件mondial.xml进行聚类。聚类树边被随机指派权重。如表1所示,随着块大小的降低,最终解的值增加。随着块大小的降低,所使用(用于动态规划)的权重区间的数量增加,并且XC变得更加准确。同时,这导致存储器使用的增加和运行时间的增加。当块大小为1时,XC的行为类似于确切的Lukes的方法,并且所需的运行时间超过2小时(应用在2小时之后终止)。
表1使用mondial.xml对权重区间的动态规划的效果

对于4096和256的块大小,解值之间的差异不显著。然而应当注意,运行时间从32.5秒增加到了299.9秒。这表明对每个已处理节点(意味着4096个)保留单个分区的策略,即保留具有最高值的分区的策略在实践中表现良好。如结果所示,对于块大小1的XC(同等地,Lukes的方法)展现出不切实际的存储器和运行时间需求;对于较大的块大小,XC获得具有合理存储器和运行时间使用的良好解。
表2使用mondial.xml评估存储器受限的执行

表2提供了在改变指定的存储器使用限制的情况下,XC的特性。重用先前试验的实验设置(相同文档,相同权重边界),来评估XC的存储器受限的特性。首先使用4096的块大小并且没有任何存储器限制的情况下进行该试验。接着以较小的存储器限制(可用存储器量从1MB到30KB)重复该试验。结果表明,即使在极端的存储器限制的情况下,XC仍然表现良好。此外,随着可用存储器数量的降低,XC性能降级适度(2种极端情况的结果分区的值与最优近似解仅相差6%)。对于严格的存储器限制,执行时间从32.5秒降低到9.049秒。这两个试验表明,在使用较大的块大小和较低的存储器限制时,迅速得到良好的解是可能的。
还度量识别就绪聚类对结果质量的影响。如上所述,当没有识别就绪聚类时,进行聚类使用大量存储器,并且需要明显更多的执行时间。在没有识别就绪聚类的情况下对mondial.xml进行聚类。由于预计的存储器使用量相当大,强制一200KB的存储器限制。在进行就绪聚类识别并按照相同存储器限制的情况下,重新进行该试验。当没有使用就绪聚类识别时,最终聚类的值降低了20%。当就绪聚类没有被识别时,XC的存储器消耗相当迅速地达到存储器限制,并且在达到违反存储器的规定之前,仅较小的子树得到了处理。因此,只有具有较小值的聚类被传送到页面分配子系统;降低了最终结果的值。
图3示出了当XML文件的大小增加时(在这种情况下,这意味着输入XML节点的数量也增加),XC的特性。对于这个试验,XMark XML文档产生工具包[SWK+01]被用于产生各种大小(26KB到116MB)的XMark文档。根据所连接的节点的类型来指派边权重。元素-元素边被指派权重3,元素-属性边被指派权重5,元素-文本边被指派权重9。使用W=4KB的权重边界和4KB与1KB的块大小对每个XMark文档进行聚类。为了清楚起见,图3针对从1MB变化到110MB大小的XMark文档示出了运行时间。如图3所示,对于该大小的文件,本发明的方法的运行时间几乎是线性的。
表3DFS和XC的值比较


下面将XC的效率与DFS,即另一树分区方法的效率相比较。表3提供了使用XC和DFS对6个不同XML文档进行聚类的结果。以和图3的试验相同的方式,根据所连接的节点类型指派边权重。应当注意,由于没有区分工作负荷的信息,这一配置对XC有偏差。使用4KB的权重边界,并且在4KB的块大小和无限的存储器情形下执行XC。如表3所示,对于所有文档,XC产生更好的聚类。然而在许多情况下,XC所需的时间比DFS所使用的时间要多。即使在最有利的配置中(权重边界等于块大小),XC比DFS完成更多的工作并且使用更多的存储器。这导致XC要慢于DFS。
表4具有基于工作负荷的边权重的分区(XML文档-mondial.xml)

前面的试验使用随机权重。当已知预计查询工作负荷时,随机指派的均匀性不再保持。于是根据基于工作负荷的边权重指派来获得聚类结果。使用以下有关mondial.xml的单个XPath查询/mondial/country/province/city。由初级XPath处理器执行这个查询。在此执行期间将会被遍历的XML树的边被指派权重100。接着,由使用各种块大小的DFS和XC对该文档进行分区。结果如表4所示。在分区值方面可以看出XC明显优于DFS。实际上,希望这种″偏斜″边权重指派是普遍情况。
本公开现在讨论对本发明的聚类系统的评估,包含对于较大工作负荷的使用。虽然前面的试验说明XC可用于以合理的空间和时间产生高值分区的聚类算法,但是现在考察所得到的聚类对于各种应用的有效性。为此,测试所得到的页面内容如何影响查询处理。在上述原型聚类系统的情境中执行测试。使用该系统的两个实施例对XML文档进行分区第一个实施例,XCS,使用XC作为树分区组件,而第二个实施例,D,使用DFS进行树分区。
表5评估在线装箱方法

要评估的本发明的XML聚类系统的第一个部件是页面指派部件260。表5比较了当使用XCS和DCS进行聚类时存储6个XML文档所需的盘页面的数量,其中一旦完成节点的扫描,XCS和DCS便将XML节点存储到页面中。DCS在存储器中保留多达2个未完成的页面,并且使用“贪心”策略填充这些页面(用已完成的XML节点填充)。这一“贪心”策略仅使用XML节点大小以使盘利用率最大。XCS使用如上所述的在线装箱方法存储就绪聚类。表5示出了由XCS产生的就绪聚类的数量和相应的页面数量。如表5所示,DFS(DCS中)产生略优于XC的盘页面利用率(5%左右)。其一个原因是XC趋向于比DFS存储更大的数据″块″。这引起分段,从而导致略微降低了页面利用率。
现在考察聚类如何影响XML查询执行的性能。为此,考虑以下针对mondial.xml的查询工作负荷,其包括3个XPath查询(Q1)/mondial/country/province/city(Q2)/mondial/country/enthicgroups(Q3)/mondial/country/province/city/name每个查询被指派相同的权重(100)。分别使用有关/mondial/country和/mondial/country/province的路径索引执行查询Q2和Q3(即只有从被索引节点遍历的边才被指派非零边权重)。使用该指定工作负荷产生mondial.xml的XC聚类(XC)。根据这一工作负荷,XCS的边权重指派器在扫描文档的同时指派适当的权重。页面分配子系统260使用装箱试探算法将就绪聚类250映射到页面270。3个其它聚类XCi分别基于3个工作负荷,其每个工作负荷包括单个查询Qi,1≤i≤3。在使用XC的同时,还使用4KB的权重边界和4KB的块大小。最后,使用以相同权重边界产生聚类DFS的较简单DFS算法(DCS中),对文档进行分区。
在3个不同页面调度情境下针对不同布局(XC,XCi和DFS)模拟初级XPath处理器对每个查询的执行,并且度量缺页情况。针对该组合的查询工作负荷在以下两种模式中重复该试验(1)串行这一情境按顺序(即Q2Q1Q3)模拟这3个查询的执行,和(2)并行这一情境以并行方式模拟这3个查询的执行。针对2个布局XC和DFS评估该组合的查询工作负荷。
对于这些试验,产生在执行XPath查询的同时遍历的XML节点的跟踪轨迹。这些轨迹和针对不同聚类的页面布局一起用于评估页面调度特性。修改2个重要参数以改变页面调度情境。首先,缓冲区大小是存储器中能够保存的盘页面的数量。其次,预取量是在单次盘访问(从所寻址的页面开始,包含连续页面)中获取的连续盘页面的数量。第一种情境使用1个页面、其中具有1个预取页面的缓冲区大小(表示为1/1);第二种情境考虑无限的缓冲区大小(即在执行期间,获取的页面均保留在存储器中)和1个预取页面(表示为无限/1);最后的情境模拟使用具有128个页面、其中有8个预取页面的缓冲区的现实情况(表示为128/8)。这一情境使用简单LRU模式丢弃存储器内页面。在所有情况下,都假定4KB的页面大小。
图4示出了对各个查询工作负荷的缺页情况度量,图5示出了对串行和并行模式的组合查询工作负荷的缺页情况度量。如结果所示,在所有试验中,XC显然优于DFS。这表明通过边权重适当模拟运行时刻的基本原则能够导致显著的性能优点。几乎在所有情况下,DFS聚类引起大量的缺页情况。对于各个查询工作负荷,当单纯根据工作负荷查询对文档进行聚类时,观察到了工作负荷的最好页面调度性能。使用组合查询工作负荷进行聚类仅对第三个查询Q3有好处。查询Q1和Q3均遍历边province/city,因此组合查询工作负荷产生的聚类与通过使用具有Q3的工作负荷而产生的聚类一样好。类似地,参见图5,这些XPath查询的串行和并行执行受益于智能聚类。尤其是,组合查询工作负荷的串行执行从XC的工作负荷已知的聚类中大大受益。串行和并行情况的结果表明,XC利用局部亲合性的能力实际上是非常有效的。值得注意,DFS分区值比XC分区值低10%。试验度量已经表明,即使较小的分区值差异也会导致页面调度特性的根本差异(图4和5)。
现在参照图6,其中示出了根据本发明的实施例的方法的流程图。在步骤1010,读取下一个xml标记。在判决块1020处,确定该xml标记是否具有空值。如果是,则不进行进一步的处理。如果不是,则确定该标记是否是结束标签(步骤1030)。如果该标记不是结束标签,则初始化该标记(步骤1040,下面会参照图7详细描述)。在初始化之后,确定该标记是否是属性的当前xml子节点,如判决块1060所示。如果不是,则该过程返回到步骤1010。如果是,则该标记是以已完成元素为根的子树,或具有关于其边的权重的属性,如数据块1070所示。返回到步骤1030,如果该标记是结束标签,则确定该树节点是否包含子节点,并且该节点是否完成,如判决块1060所示。如果不是,则该过程返回到步骤1010。如果是,则该标记是以已完成元素为根的子树,或具有关于其边的权重的属性,如数据块1070所示。接着在步骤1080将数据1070划分成一组W/C个分区,其中W是分区的权重,C是块大小,如数据块1090所示。(下面参照图8详细描述步骤1080)。在步骤2000,对数据进行后分区处理,下面会参照图9详细描述该处理。根据后分区处理的结果,读取下一个xml标记(步骤1010),或者继续进行分区(步骤1080)。
现在参照图7,其中示出了图6的初始化步骤的流程图。在步骤2010,针对所分析的xml节点创建树节点。接着确定该树节点是否是父节点,如判决块2020所示。如果不是,则该节点变成该树的根(步骤2040);如果是,则在父节点和子节点之间建立链接,并且指派边权重(步骤2030)。在步骤2050,创建具有权重W和值0的初始分区。这个分区接着被加入已创建分区的列表中(步骤2060)。
现在参照图8,其中示出了图6的分区步骤的流程图。在单遍分析XML文档期间,通过过程调用对一个XML节点调用XC。每当完全扫描了一个XML节点时(即在endElement(),character()SAX事件期间,或当扫描属性标签及其值时),调用XC。在每次调用之前,假定对XML节点v调用之前,边权重指派器必须已经为连接到其XML父节点的边指派权重。XC始终对节点v起作用,v的子节点的集合代表已经由XC处理的子树。常数hwm和lwm分别是高和低水位标志,满足lwm<hwm<存储器使用限制。
在判决块2070,确定存储器使用是否大于hwm。如果是,从(已处理子树的)最高值分区列表中获得与所关心节点相关的最高值分区P,并且将其从(已处理子树的)最高值分区列表中移除(步骤2080)。接着,从聚类树删除相关子树的节点(步骤2090),并且其聚类被标记为就绪(步骤3000)。接着,该聚类被传送给页面分配(步骤3010)。只要存储器使用大于hwm,这一过程就继续执行。一旦存储器使用低于hwm,则使用其根节点的分区和其子节点的分区对子树进行分区(步骤3020)。创建W/C个分区,其中在具有相同权重的所有分区中,该W/C个分区中的每个分区具有最大值(步骤3030)。这通过创建具有等于v的文本大小的权重wx的聚类节点x来实现;接着将x连接到其父节点。然后,用值0和权重w形成分区Pw,该分区包括含有节点x的单个聚类(Pw={(x)})。在所有分区中,具有最大值的分区被选择为最优分区(步骤3040)。如果v是文本节点(叶),则Pw被标记为节点x的最优分区。对于所有其它节点,这个分区被标记为初始分区。接着,计算以具有中枢聚类权重w′的节点x为根的最佳中间分区的w′=WxC,K,WC,]]>这要调用Lukes的方法(其中连接线被任意断开)。为具有根x的子树识别(局部)优化的分区Poptx,以作为在与节点x相关的中间分区中具有最大值的中间分区。接着,删除该树的当前根的子节点(步骤3050),并且接着返回以节点x为根的该树的W/C个分区(步骤3060)。
现在参照图9,其中示出了图6的后分区步骤的流程图。在判决块3070,对已分区子树的W/C个分区中的每个分区进行评估,以检查它们是否包含XML文档的根节点。如果这些分区包含根节点(即它们是在整个文档之上被定义的),则选择最优分区(步骤3080),并且其全部聚类被标记为就绪(步骤3090)。接着,这些就绪聚类被传送到页面分配(步骤4000)。如果没有根节点(判决块3070),则在判决块4010确定是否存在任何就绪聚类。如果没有,则该过程返回到分区步骤(步骤1080)。如果有,则这些就绪聚类被传送到页面分配(步骤4020)。根据需要重复这个过程,如判决块4010所示。
应当理解,根据至少一个当前优选的实施例,本发明包含用于按节点分析XML文档的装置;用于初始化至少一个所分析的节点的装置;用于对至少一个所分析的节点进行分区的装置;用于确定至少一个所分析的节点的XPath工作遍历的装置;和用于处理至少一个所分析的节点的装置,其可以被实现在运行适当软件程序的至少一个通用计算机上。它也可以被实现在至少一个集成电路或至少一个集成电路的部分上。于是,应当理解,本发明可以通过硬件,软件或二者的组合来实现。
如果这里没有另外指出,则将假定这里提及和引用的所有专利、专利申请、专利出版物和其它出版物(包含基于Web的出版物)在这里均全文引用作为参考。
虽然这里已经参照附图描述了本发明的示例性实施例,但应当理解,本发明并不局限于这些确切的实施例,并且本领域的技术人员在不背离本发明的范围和宗旨的前提下可以进行各种其他的改变和修改。
参考文献列表[W3C]World Wide Web Consortium.W3C Architecture Domain.www.w3c.org/xml.Online Document. D.Florescu and D.Kossmann.Storing and Querying XMLData using an RDBMS.IEEE Data Engineering Bulletin,22(3)27-34,1999[Fre91]G.N.Frederickson.Optimal Algorithms for Tree Partitioning.In Proceedings of the Second Annual ACM-SIAM Symposium on DiscreteAlgorithms,pages 168-177,1991[GJ79]M.S.Garey and D.S.Johnson.Computers and Intractability.W.H.Freeman and Co.,1979. C.Gerlhof,A.Kemper,C.Kilger,and G.Moerkotte.Partition-Based Clustering in Object BasesFrom Theory to Practice.InProceedings of the Foundations of Data Organization and Algorithms,FODO′93 Chicago,Illinois,October 13-15,pages 301-316,1993[JN83]D.S.Johnson and K.A.Niemi.On Knapsacks,Partitions,anda New Dynamic Programming Technique for Trees.Mathematics ofOperations Research,8(1),1983. B.W.Kernighan.Optimal Sequential Partitions of Graphs.J.Assoc.Comp.Mach.,18(1)34-40,1971[KM00]C.Kanne and G.Moerkotte.Efficient Storage of XML Data.In Proceedings of the 16th International Conference on Data Engineering,San Diego,U.S.A.,March 2000.IEEE Computer Society. J.A.Lukes.Efficient Algorithm for the Partitioning of Trees.IBM Journal of Research and Development,13(2)163-178,1974[Luk751 J.A.Lukes.Combinatiorial Solution for the Partitioning ofGeneral Graphs.IBM Journal of Research and Development,19(2)170-180,1975[Sch77]M.Schkolnick.A Clustering Algorithm for HierarchicalStructures.ACM Transactions on Database Systems(TODS),2(1)27-44,1977. A.R.Schmidt,F.Waas,M.L.Kersten,D.Florescu,M.J.Carey,I.Manolescu,and R.Busse.Why and How to Benchmark XMLDatabases.ACMSIGMOD Record,3(30),September 2001. F.Tian,D.DeWitt,J.Chen and C.Zhang.The Design andPerformance Evaluation of Alternative XML Storage Strategies.In ACMSIGMOD Record,(31)1,pages 5-10,ACM Press,2002. M.M.Tsangaris and J.F.Naughton.A Stochastic Approachfor Clustering in Object Bases.In Proceedings of the 1991 ACM SIGMODInternational Conference on Management of Data,Denver,Colorado,May29-31,pages 12-21.ACM Press,1991[TN92]M.M.Tsangaris and J.F.Naughton.On the Performance ofObject Clustering Techniques.In Proceedings of the 1992 ACM SIGMODInternational Conference on Management of Data,San Diego,California,June 2-5,pages 144-153.ACM Press,199权利要求
1.一种用于对XML文档进行聚类的系统,该系统包括用于按节点分析XML文档的装置;用于初始化至少一个所分析的节点的装置;用于对至少一个所分析的节点进行分区的装置;以及用于对至少一个所分析的节点进行处理的装置。
2.根据权利要求1所述的系统,其中用于初始化至少一个所分析的节点的装置包括用于针对至少一个所分析的节点创建至少一个树节点的装置;用于提供关于至少一个所分析的节点的XML工作负荷信息的装置;用于当所分析的节点是父节点时提供至少一个父/子链接并且指派边权重的装置;用于当所分析的节点不是父节点时指定所分析的节点为树的根的装置;用于创建分区的装置;以及用于将所创建的分区添加到已创建分区的列表的装置。
3.根据权利要求2所述的系统,其中用于提供XML工作负荷信息的装置包括用于当至少一个节点被分析时分析至少一个XPath查询的装置;用于识别被XPath查询访问的至少一个节点的装置;以及用于确定经由父-子节点边对至少一个节点的访问的次数的装置。
4.根据权利要求2所述的系统,其中用于创建分区的装置创建具有权重w′(等于节点权重)和值零的初始分区。
5.根据权利要求1所述的系统,其中用于对至少一个所分析的节点进行分区的装置包括用于通过利用根节点的分区和至少一个子节点的分区对至少一个所分析的节点进行分区的装置;用于创建Wc=W/C(W是权重边界,C是块大小)个分区的装置;用于从该Wc个分区中选择具有最大值的分区的装置;以及用于删除该至少一个所分析的节点的任何子节点的装置。
6.根据权利要求5所述的系统,其中该Wc个分区的每个在具有该相同权重的所有分区中具有最大值。
7.根据权利要求2所述的系统,其中由较重的边连接的节点被映射到相同页面。
8.根据权利要求2所述的系统,其中系统存储器是受限的。
9.根据权利要求2所述的系统,还包括用于识别至少一个就绪聚类的装置。
10.一种用于单遍地对XML文档进行聚类的系统,该系统包括用于按节点分析XML文档的装置;用于确定至少一个所分析的节点的XPath工作遍历的装置;用于对至少一个所分析的节点进行聚类的装置;以及用于向页面指派至少一个聚类的装置。
11.根据权利要求10所述的系统,其中用于分析至少一个所分析的节点的装置包括用于为至少一个所分析的节点创建至少一个树节点的装置;用于提供关于至少一个所分析的节点的XML工作负荷信息的装置;用于当所分析的节点是父节点时提供至少一个父/子链接并且指派边权重的装置;用于当所分析的节点不是父节点时指定所分析的节点为树的根的装置;用于创建分区的装置;以及用于将所创建的分区添加到已创建分区的列表的装置。
12.根据权利要求11所述的系统,其中用于提取XML工作负荷信息的装置包括用于当至少一个节点被分析时分析至少一个XPath查询的装置;用于识别被XPath查询访问的至少一个节点的装置;以及用于确定经由父-子节点边对至少一个节点的访问的次数的装置。
13.根据权利要求11所述的系统,其中用于创建分区的装置创建具有权重w′(等于节点权重)和值零的初始分区。
14.根据权利要求10所述的系统,其中用于对至少一个所分析的节点进行分区的装置包括用于通过利用根节点的分区和至少一个子节点的分区对至少一个所分析的节点进行分区的装置;用于创建Wc=W/C(W是权重边界,C是块大小)个分区的装置;用于从该Wc个分区中选择具有最大值的分区的装置;以及用于删除该至少一个所分析的节点的任何子节点的装置。
15.根据权利要求14所述的系统,其中该Wc个分区的每个在具有该相同权重的所有分区中具有最大值。
16.根据权利要求11所述的系统,其中由较重的边所连接的节点被映射到相同页面。
17.根据权利要求10所述的系统,其中系统存储器是受限的。
18.根据权利要求10所述的系统,还包括用于识别至少一个就绪聚类的装置。
19.一种用于单遍地对具有至少一个节点的XML文档进行聚类的系统,该系统包括用于指派边权重的装置;用于进行树分区的装置;以及用于页面指派的装置。
20.根据权利要求18所述的系统,其中系统存储器是受限的。
21.根据权利要求19所述的系统,还包括用于识别至少一个就绪聚类的装置。
22.一种用于对XML文档进行聚类的方法,包括步骤按节点分析XML文档;初始化至少一个所分析的节点;对至少一个所分析的节点进行分区;以及处理至少一个所分析的节点。
23.根据权利要求22所述的方法,其中初始化至少一个所分析的节点的步骤包括针对至少一个所分析的节点创建至少一个树节点;提供关于至少一个所分析的节点的XML工作负荷信息;当所分析的节点是父节点时提供至少一个父/子链接并且指派边权重;当所分析的节点不是父节点时指定所分析的节点为树的根;创建分区;以及将所创建的分区添加到已创建分区的列表中。
24.根据权利要求23所述的方法,其中提供XML工作负荷信息的步骤包括当至少一个节点被分析时分析至少一个XPath查询;识别被XPath查询访问的至少一个节点;以及确定经由父-子节点边对至少一个节点的访问的次数。
25.根据权利要求22所述的方法,其中以权重w′(等于节点权重)和值零来创建初始分区。
26.根据权利要求22所述的方法,其中对至少一个所分析的节点进行分区的步骤包括利用根节点的分区和至少一个子节点的分区对至少一个所分析的节点进行分区;创建Wc=W/C(W是权重边界,C是块大小)个分区;选择该Wc个分区中具有最大值的分区;以及删除该至少一个所分析的节点的任何子节点。
27.根据权利要求26所述的方法,其中该Wc个分区的每个在具有该相同权重的所有分区中具有最大值。
28.根据权利要求23所述的方法,其中由较重的边所连接的节点被映射到相同页面。
29.根据权利要求22所述的系统,还包括识别至少一个就绪聚类。
30.一种机器可读的程序存储装置,有形地体现可被机器执行以实现用于对XML文档进行聚类的方法步骤的指令程序,所述方法包括步骤按节点分析XML文档;初始化至少一个所分析的节点;对至少一个所分析的节点进行分区;以及处理至少一个所分析的节点。
全文摘要
本发明公开了用于XML文档的聚类的方法和系统。所述方法在指定的存储器使用限制下操作。该系统实现该方法,并且扫描XML文档,根据应用工作负荷指派边权重,将XML节点的聚类映射到盘页面,所有这些均在分析器控制的对XML数据的单遍处理中完成。应用工作负荷信息被用于产生导致大大降低所考虑的工作负荷的缺页情况的XML聚类方案。本发明公开了用于表示工作负荷信息的若干方案。例如,工作负荷可以列出在应用期间调用的XPath操作符,以及其调用频率。通过引入例如查询重要性或查询编译代价的附加特性,能够进一步细化应用工作负荷。使用随机方案也能够模拟XML访问模式。
文档编号G06F7/00GK1614594SQ20041007826
公开日2005年5月11日 申请日期2004年9月21日 优先权日2003年11月7日
发明者R·博尔达维卡尔, S·K·帕德马纳班, O·什穆埃利 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1