Xml的简明索引结构的制作方法

文档序号:6569920阅读:213来源:国知局
专利名称:Xml的简明索引结构的制作方法
XML的简明索引结构相关申请的交叉引用本申请要求已于2005年12月6日提出的澳大利亚临时专利申请No. 2005卯6846的优先权,上述申请的公开内容被整体合并于此作为引用参考。技术领域简明数据和索引结构旨在将存储容量的约束设置为接近理论最优值的 同时使得对任意数据进行更新和搜索操作的效率最大化。更具体地说,本发 明涉及简明索引结构(succinct index structure )、使用简明索引结构的方法、 构造简明索引结构的方法、用于执行构造简明索引结构的方法的计算机应用 程序、以及用于构造和使用简明索引的计算机系统。
背景技术
扩展标记语言(XML)数据与传统关系数据的主要区别在于,关系数 据使用二维表进行组织而XML数据以具有层次结构的树进行组织。 例如,下面给出短片断的XML:<b><c>d</c></b〉 <b><c>e</c></b> <b><c>f</c></b></a>这可由如图1所示的层次树来表示。虽然存在若干用于有效处理XML查询的树-遍历方法,不过基于集合的 查询处理(传统的关系数据库)也是令人满意的。例如,当处理大型XML 文档的查询时,使用基于遍历的方法来执行查询处理可能是困难的且运行时间很长。
在关系数据库管理系统中,通过在基于集合处理中生成和利用数据库索 引能够提高查询性能,其中该数据库索引返回中间结果。然而,对不4衣赖关
系数据库而存在的XML数据进行基于集合的查询处理存在一些缺点。造成 这些缺点的原因是,在查询任何节点时,都需要查询任意两个XML节点之 间的拓朴关系。
XML查询可以由多个路径表达式组成。路径表达式可以包含其结果节 点必须满足的拓朴关系。例如,路径表达式/a[b]/c搜索以c作为其节点标签 且具有带标签a的父节点和带标签b的同属节点的所有节点。为了有效应答 任何种类的先辈/后辈查询,需要结构连接操作。结构连接操为下列技术的 名称给定可能的先辈节点列表和可能的后辈节点列表,则可确定列表的节 点之间的先辈-后辈关系。
索引经常可供查找满足特定标签的节点的集合。生成和维护包括确定拓 朴关系所需的编码方案的索引可能很昂贵。最普通的编码方案使用起始-结 束-深度三元组(start-end-depth triplet )、 前序-后序-深度三元组
(preorder画postorder-depth triplet )或Dewey编码。给定具有n个节点的XML 文档,则至少需要logn位来表示三元组内的每个数。如果索引返回与文档 大小成比例的节点集合,那么需要至少O(nlogn)位来恰当表示这样的集合。 已知的是,仅需要2n+o(n)个位以简明地表示整个拓朴。因此,这样的索引
(依赖这些最普通的编码方案)基本上占用比原来的文档本身更多的空间, 从而极大地限制了索引的有用性。

发明内容
在第 一方面,本发明提供一种为以层次结构表示的数据编索引的简明索 引结构,所述索引结构包括一符号表,该符号表以所有不同根-叶路径作为 键标或以特异元素标记名作为键标,其中在所述符号表中,针对一键标的条 目具有与该键标相关联的节点的经转换的拓朴信息及对所述拓朴信息采用的转换方法的指示,并且所采用的转换方法取决于与该键标相关联的节点之 间的拓朴关系。
所述拓朴信息可以包括针对每个节点的三元组编码方案。所述三元组编 码方案可以为起始-结束-深度三元组编码方案或为前序-后序-深度三元组编 码方案。所述三元组可以采用树遍历次序的形式。
所述层次结构可以为可扩展标记语言(XML)。
所述转换方法可以包括对所述拓朴信息进行差分编码,例如,对所述列 表中的每个三元组中的每个值进行差分编码。所述三元组的第一差分编码值 可以为连续三元组的起始位置的差。若给定每个节点的起始位置和结束位置 之间的差,则所述三元组的第二差分编码值可以为连续三元组的这些值之间 的差。第三差分编码值可以为连续三元组的深度的差。
所述转换方法的信息可以包括一替换值,该替换值用来替换与所述键标 相关联的每个节点的三元组的第一值、第二值和第三值中的每一值。
所述转换方法的信息可以包括直方图的形状的指示,其中所述直方图绘 出了所有节点的三元组的第一值、第二值和第三值中的每一值。
所述转换方法的信息可以包括模式函数,所述模式函数输出与所述键标 相关联的所有节点的三元组的第一值、第二值或第三值。
所述转换方法的信息可以指示所述经转换的拓朴信息与所述拓朴信息 相同。
所述针对一键标的条目可以具有多种用于转换所述拓朴信息的方法。针 对与所述键标相关联的所有节点的三元组的第 一值、第二值和第三值中的每 一值可以采用一种方法。
所述经转换的拓4卜信息以可更新的压缩形式被存储。
所述拓朴信息可以从简明数据结构中得出。所述简明数据可以包括拓朴 层(层0),所述拓朴层使用对称括号表示来表示节点的嵌套。也就是说, 对树的前序遍历在遇到开始标记时输出一位(左括号)并在遇到结束标记时 输出相反位(右括号)。
9在第二方面,本发明提供一种使用所述简明索引结构的方法,该方法包
括以下步骤
在所述符号表中定位所需的键标;并且
基于用来转换与该键标相关联的节点的拓朴信息的转换方法,对所述经 转换的拓朴信息进行再转换,来检索与所述键标相关联的所有节点的拓朴信息。
所述简明索引结构用于处理结构连接查询。
在第三方面,本发明提供 一 种为以层次结构表示的数据构造简明索引的 方法,所述方法包括以下步骤
1、 以树遍历次序解析所述数据来生成节点的拓朴编码列表,并且针对 与不同根-叶路径或特异元素标记名相关联的节点,评定这些节点之间的 拓朴关系;
2、 根据所述评定,对与所述不同根-叶路径或特异标记名相关联的节点 的该拓朴编码列表进行转换;并且
3、 在一以所述不同根-叶路径或特异标记名作为键标的符号表中生成一 条目,该条目由与所述键标相关联的经转换的拓朴信息及所采用的转换 方法的指示组成。
所述解析的步骤可以包括对所述树进行遍历来生成拓朴编码列表,该拓 朴编码列表存储于可扩展数组中。所述拓朴编码列表可以包括针对每个节点 的三元组编码方案。所述三元组编码方案可以为起始-结束-深度三元组编码方案。
一旦所述可扩展数组达到预定的块大小,则所迷方法可以进一步包括 继续生成所述拓朴编码列表并将其存储在新块的可扩展数组中。
在生成所述拓朴编码列表之后,对如上所述拓朴列表进行差分再编码。 所述方法可以进一步包括执行群集算法,并且如果确定了多个群集,则所述 块被分成每个群集的较小的块。
所述转换方法的信息可以包括如上所述地那样替换值、绘出所述值或生成模式函数。
在第四方面,本发明提供一种用于执行为以层次结构表示的数据构造简 明索引的方法的计算机软件应用程序。
在第五方面,本发明提供一种为以层次结构表示的数据构造简明索引的
计算机系统,所述计算机系统包括
处理装置,其以树遍历次序解析所述数据来生成节点的拓朴编码列表, 以及针对与不同根-叶路径或特异元素标记名相关联的节点,评定这些节点 之间的拓朴关系,并且根据所述评定,对与所述不同根-叶路径或特异标记 名相关联的节点的该拓朴编码列表进行转换;以及
存储装置,其用于存储带有一以不同根-叶路径或特异元素标记名作为 键标的条目的索引,该条目由与该键标相关联的经转换的拓朴信息及所采用 的转换方法的信息组成。
所述存储装置可以为还存储一计算机软件应用程序的计算机可读存储 介质,所述计算机软件应用程序可操作地执行如上所述的为以层次结构表示 的数据构造简明索引的方法。所述计算机系统为诸如PDA、移动电话或膝 上型电脑之类的便携式计算机。
在第六方面,本发明提供一种使用如上所述的以层次结构表示的数据的 简明索引的计算机系统,所述计算系统包括
存储装置,其用于存储所述简明索引;以及
处理装置,其用于在所述符号表中定位所需的键标,并且基于用来转换 与该键标相关联的节点的拓朴信息的转换方法,对所述经转换的拓朴信息进 行再转换,来检索与所述键标相关联所有节点的拓朴信息。
所述存储装置可以为还存储一计算机软件应用程序的计算机可读存储 介质,所述计算机软件应用程序可操作地执行如上所述的使用以层次结构表 示的数据的简明索引方法。
所述计算机系统可以进 一 步包括用于例如通过因特网从远程设备接收
数据处理请求的通信装置。所述计算机系统或远程设备可以为诸如PDA、移动电话或膝上型电脑 之类的便携式计算机。
索引是获取数据的拓朴结构的空间有效方式,并且能够使结构连接在
XML数据上有效实现。在处理XML数据时,在表示中间结果集合(以及最 终结果集合)时要占用大量的内存使用量。当内存空间紧张时,查询性能由 于额外的磁盘1/0操作而明显恶化。利用本发明的索引,中间结果集合以简 明形式表示,并且能够用于有效地执行结构连接操作。


现在将参考附图描述本发明的示例,其中
图1示出XML文档摘录的层次表示(现有技术);
图2为可用于本发明的计算机系统的示意图3提供拓朴存储层的总体示意图4示出另外的XML文档摘录的层次表示;
图5示出图4中摘录的对称括号编码;
图6示出存储空间在使用基于指针的方法情况下和使用对称括号方法情况 下的差别;
图7为示出根根据综合简明系统的存储XML文档的方法的流程图; 图8为示出根据本发明的构造索引的方法的流程图9、图10和图11为示出基于所有b节点的拓朴编码列表的差分值的直
方图12至图25示出根据本发明的生成图12中所示XML文档的简明索引的方法。
具体实施例方式
图3为示出本发明的实施例可以赖以实现的计算机系统4的框图。台式计 算机6和PDA或移动设备8皆为可以用于本发明的计算机示例。两个设备都具
12有如现有技术中通常所理解的必要的处理、存储、通信、.输入和输出装置。为了使用本发明,设备6和8均需要使用软件应用程序IO来访问本发明 的简明索引。在本示例中,设备6和8可以具有在计算机6和8上本地存储在 各自存储装置上的索引12。然而,诸如PDA8之类的设备可能具有更低的处理 和存储容量并可以利用互联网12来访问简明索引12。也就是说,所有的索引 12和相关联的处理16、索引12和软件18可以相对PDA 8远程存储。软件(或远程登录软件)10可以(以本地或远程方式)控制处理器以执行 查询引擎16所需要的处理。查询引擎16使用简明索引12以便解答在设备8 和10输入的查询。简明索引12 (以本地或远程方式)存储在存储器中,并且 按照以下所详细描述地被生成和更新。本发明的简明索引12由索引指示器软件 组件18生成。该组件18直接将一定范围内的信息,例如,XML文档20和第 三方数据库22,作为输入进行编索引。或者,可以利用简明编码器24对XML 文档20和第三方数据库22进行编码,其中简明编码器24将数据转换成简明形 式然后存储在26。索引指示器18还能够接受此简明形式作为输入来形成简明 索引12。另外的软件为简明访问器28,其能够对简明数据库DBMS26进行解 释以便为设备6或8提供查询结果,或者供处理器在查询处理16期间使用。查询可以返回在简明数据库26中存储的记录。为了向计算机8或10返回 这些结果,可以通过查询引擎16使用另外的软件应用程序28来访问和解释简 明数据库26。或者,计算机8或10可以使用简明访问器软件28来直接访问和 解释简明数据库26。现在将描述综合简明(ISX, Integrated Succinct)系统的简明存储层26。 ISX 包含三层,也就是,拓朴层、内节点层和叶节点层。图3示出这些层的总体图。内节点层存储用于快速查询的测试数据的XML元素、属性和签名。最后,叶 节点层存储文档的文本数据。文本数据可以通过各种常见压缩技术被压缩,并 供拓朴层引用。这里集中描述拓朴层。与先前的方法不同,拓朴层的表示不使用指针。它基于支持有效节点导航和更新的对称括号编码。在层0 ( Tier 0 )中使用的对称括号编码反映任何XML文档内的元素节 点的嵌套,并能够通过对树的前序遍历获得。在遍历期间,当遇到开始标记 时输出左括号,当遇到结束标记时输出右括号。例如,给定图4中所示的XML文档摘录,则会如图5所示地对层0的 对称括号编码进行存储。括号下方的箭头指示括号对。为了清楚起见,省略 了按位操作的实施细节,并将单个位(括号)像一个对像一样来对待。多余量是在拓朴的给定部分出现的左括号和右括号间的数量差。例如, 在图5中,dblp的左括号和(gmdate的右括号之间的多余量为2。文本节点 "2003"的右括号和booktitle的左括号之间的多余量为-1。在XML文档树 中节点x的深度可以通过查找x的左括号和文档的起点之间的多余量计算出 来。例如,在图5中,author的左括号的深度为3。该编码方法有若干有益效果。首先,拓朴特性(深度、起始位置/结束 位置、前序数/后序数)、拓朴关系(先辈/后辈、文档次序)、文档遍历、 DOM导航和XPath轴都可以利用上述括号表示来确定。再者,可以通过仅 使用小集合的物理运算符来简化数据库。之所以避免采用任何基于指针的方法来将括号连接至其标签是因为这 将使空间的占用量从2n-O(n)增加到不太令人满意的0(nlgn)O(nlgn)。这在 图6中以图的形式示出。将参见图7的流程图和以下的示例XML文档摘录描述ISX系统的另外 示例<b><c>d</c></b> <b><c>e</c></b> <b><c>f</c></b></a〉实际上,XML文档与这里讨论的摘录相比会大很多。利用对称括号,该文档可以表示30为 (b (C (d)))(b (c (e))) (b (c (e)))因此,使用对称括号的XML文档摘录的拓朴将如此表示 (((()))((()))((())))在存储器中用二进制位0表示左括号且在存储器中用二进制位1表示右 括号。此后,层次结构将如此存储在存储器中32:因此,每个0表示新节点的开始,每个01组合表示转换,例如叶节点。利用该系统,任何文档的存储空间为2n个位(其中n为节点的数目)。当然,步骤30和步骤32可以作为一个单独的步骤来执行。此外,毫无 疑问,位的使用是可以互换的,以便用l位表示左括号而用O位表示右括号。现在将下列摘录(重复以上的)与节点的标签(label)和每个位的编号 位置(number position )垂直对齐。abed---bee ---bef----0000111000 1110001111 (bp)0123456789 0123456789 (位置)这里可以看出节点〈a〉位于位置0而第三节点〈b〉位于位置13。现在可以利用拓朴的位表示来对块(block) #1行查询。例如,查询可 以是"位置13的节点的父节点位于什么位置?"由于已知括号成对出现,所以如果回溯扫描块直到存在O比1多两个时, 那么就找到了父节点的位置,可以发现在此例中父节点的位置为位置0。该文档的位表示最初被分成特定大小的块34。例如,上面讨论的摘录 #皮分成两个块oooomooo151110001111 0123456789对各个块进行概括36来生成包括层1的三元组。针对每个块计算下面 的信息 块中0的数目 块中1的数目 向前最大差,也就是说,在从左向右扫描块时计算当前和(running sum),,人当前和的^直为0开始,每遇到一个(H立,当前和4皮力口1,每 遇到一个1位,当前和被减1。在块的任何位置,当前和所达到的最 高值被当作向前最大差。
向前最小差,也就是说,与上面一样计算当前和。在块的任何位 置,当前和所达到的最小值被当作向前最小差。
向后最大差,也就是说,与上述关于向前最大差一样计算当前和, 但是改为从右向左对块进行扫描。
向后最小差,也就是说,与上面关于向前最小差一样计算当前和, 但是改为从右向左对块进行扫描。
节点的数目,也就是说,在块中找到01组合的次数。对于最后一 位,可以检查后一块的位(或者可替代地,假设选择的方法连贯一致 的话,则可以一企查前一块的最后一位)。因此,对于块0000111000,概括信息表现为(7,3,4,1,4,0,2)。 而对于块1110001111,概括信息表现为(3,7,0,-4,-1,-4,1 )。 利用该概括信息,现在可以基于以上两个层1三元组的示例来描述DOM查询。例如,采用如以上"位置13的节点的父节点位于什么位置?"进4亍相同的查询。可以向后扫描直到始于位置13的位的块的开始。从位置13到该块的开16始存在下列位1110。
0的数目为1而1的数目为3。从1的数目中减去0的数目得到-2。现在从前一块中得到向后最大差值为4,并将其加上-2,得到 数2。现在从这可以知道匹配的位在前一块。当文档很大时,重复生成层1的概括元组的过程38,此次基于层1的 数据生成层2。两层通常足够用于所有情况。再次将层1元组分成块并生成 另外的元组来生成层2。这个表示XML文档的拓朴信息的方法节省空间,具有位于常系数的理 论最小值范围内的空间需求。对于常数e,其中l<=e<=2,以及有n个节点 文档,需要2en+o(en)个位来表示XML文档的拓朴(2n )连同概括信息 (o(en))。平均起来可以以固定的次数处理节点的插入,但最差情况为0(lg2n)针对数据处理所要的原操作(primitive operation ),这种表示拓朴信息的方 法还可以保持低的访问和更新成本。它还支持以接近常数次进行导航操作。为了帮助快速检查用来表示XML文档的0和1,可以构造简明索引结 构(SIS, Succinct Index Strcture) 12。该索引4是供更高效的查询文档的方式。SIS由具有所有不同根-叶路径(distinct root-to-leaf path)或标记名的条 目的符号表构成。例如,对于图1中的XML文档摘录,不同根-叶路径为(/a、 /a/b、 /a/b/c},而不同标记名为(a、 b、 c}。符号表的每个条目具有一些统计信息以及实际索引(已知作为原始索引 (raw index)),其方l更对所有由它的相应路径或标记名组成的标记的实例 进行定位。统计信息控制原始索引的转换。它包括关于标记名的普及以及查 询和更新的频率的信息。原始索引的转换针对空间使用、查询性能以及更新成本提供有益的折 衷。转换方法根据在任何给定时刻都最适合给定XML文档的方法作用于多 个原始索引。在块中,依据节点集合大小、查询和更新的频率,原始索引由下列数据次,而所有节点导航操作最差情况进行O、1glg"次,但平均起来为常数次。结构中的一个或多个组成 全拓引、编石马歹'J表(Full topological encoding list):它由原始形式的 三元组列表(起始、结束和深度)组成,其中每个三元组对节点的拓 朴信息进行编码。不使用任何压缩格式对该列表进行存储。该数据结 构出现在被编索引的XML文档内发生更新的地方。它还出现在新生成 的三元组并未创建整个块的原始索引的末端。
节点标识符列表(Node identifier list):它是全拓朴编码列表的另 一种形式,具有通过层(例如层0、层1和层2)间接得出的三元组(起 始、结束和深度)内的三个值,并使用了永久的节点标识符。当主要 关心的是空间时或者得出所述值的性能开销远优于加载元组的性能开 销时使用该表。
位数组特征位(Bit array flag):它是节点标识符列表的另 一种形 式,其中节点标识符的总数在XML文档内的节点的总数的常数差范围内。
部分拓朴编石马歹寸表(Partial topological encoding list): 不具有显 式节点标识符的数据结构,三元组内的起始值也可以作为(非永久) 标识符。这里仅存储起始值而不是整个三元组。
差分、全拓朴编码歹'J表(Differential, full topological encoding list):该数据结构是将全拓朴编码列表的完整块发送至第二管线以生成概括 的结果。该概括由三个直方图组成,每个直方图表示连续三元组的起 始、结束和深度间的差分值之间的关系。该概括指定用于对带有固定 大小值到可变大小值的三元组进行编码的编码方法。作为编码结果的 三元组的列表紧接着该概括进行存储。
差分节点标识符列表(Differential node identifier list):它以与差 分、全拓朴编码列表类似的方式存储节点标识符的差分值的直方图。
差分部分拓朴编码列表(Differential partial topological encoding list):它以与差分、全拓朴编码列表类似的方式存储部分拓朴编码列18页表。 模式描述符函数(Pattern descriptor function ):当文档的规则是严 格的并且三元组的差分值为常数时,可以丟弃整个全拓朴编码列表并 且替换为基于该规则和前一个起始值、结束值和深度值分别返回下一 个起始值、结束值和深度值的函数。注意到的是,这些模式函数不受 更新(例如,当新的节点被插入列表时)的影响。 一旦通过三个管线,其中每个管线将前一管线的输出作为输入,就通过 解析XML文档构造出了索引。第一管线遍历XML文档并生成表示为列表 的XML文档的拓朴编码的自然集合(naive set)。第二管线确定拓朴编码 列表的最优差分编码。最后,第三管线从差分编码列表生成模式描述符。这 里假设,给定节点,则数据库能够以固定的次数检索拓朴编码。 现在参见图8的流程图更详细地描述构造索引的方法。 首先,遍历XML文档的简明表示并生成自然拓朴编码列表50。 拓朴编码列表由三元组的列表组成,其中,每个三元组表示单个节点的 拓朴信息。也就是说,对于XML文档中的每个节点,计算三种类型的编码 号码来生成三元组。每个三元组的编码号码表示 起始该节点的0 (左括号)的位位置 结束该节点的1(左括号)的位位置深度,也就是说,节点沿树向下的距离或节点在树上的哪一级。这些三元组之间具有描述XML文档的拓朴结构的隐含关系。0的位位 置与每个节点的前序号码相同,因此可能与深度一起重新构造树。然而,没 有1的位位置,会太耗费时间以至不能答复两个节点之间的先辈-后辈关系。基于图1中示出的XML文档,处理以下查询〃b〃c[text()= "e"]也就是说,节点b是否具有后辈c且具有文本"e" 可以利用SIS获 得答复。索引返回所有b、所有c以及所有"e"。然后确定返回的节点之间的结构关系以确保它们以正确的父/后辈方式相联系。为了这样做,需要使用为 每个节点计算的三元组。 例如abed---bee---bcf---- (^^*)00001110001110001111 (bp) 012345678卯123456789 (位置)从该信息可以确定结构关系。这里,已知节点a的第一0位具有起始位 位置0且节点a的最后1位具有位置19。同样,已知第二节点b的第一0 位具有起始位位置7并且节点b的最后1位具有位置12。因此,如果节点b为节点a的后辈,那么a的起始位置应该小于b的起 始位置(0<7)。另外,b的结束位置应该小于a的结束位置(12<19)。以下是基于上述三元组的图1的XML文档摘录的拓朴编码列表。b (1,6, 1)(7, 12, 1)(13, 18, 1)c (2, 5, 2) (8, 11, 2) (14, 17, 2)"e" (9, 10, 3)例如,为答复与以上〃b〃c[text(一"f,]相同的查询,需要检索以上三个拓 朴编码列表,先将c列表与"e"列表相匹配,并返回c列表内作为"e"内 任何三元组的父辈所有三元组。对于三元组c2:(8,ll,2)和"e,,l: (9,10,3), c2.start (8)<"e"l.start (9)且 c2.end (11)〉"e"l,end (10)以及 c2.depth (2)+l="e,,l.depth(3),因此c2:(8,11,2)在可能答复的列表内。其次将新生成的列表与b列表相匹配并过滤掉不属于任何b三元组的子 辈的三元組。对于b2:(7, 12, 1),b2愈t(7)〈c2.start(8)且b2.end(12)〉c2.end(11) 以及b2.depth(l)+l-c2.depth。由于c2满足该测试,所以它就是答复。仅在列表中的节点数目少或者该列表占整个n节点文档的百分比小的 情况下保持全拓朴编码列表,例如,索引中从O(lgn)个节点直到0(n/lg2n) 个节点的范围。以 一种被称为可扩展数组的特定数据结构来保存该拓朴编码 列表。需要注意的是,必须根据其相关文档次序,即节点集合中每个节点的20前序值,对节点集合进行分类。一旦达到阚值,可以考虑在可扩展数组的那部分包括块。将包括块的可 扩展数组传送入第二管线并且继续建立具有差分编码的新可扩展数组52。 此方法的优势在于能够假设新插入的节点更可能受到随后更新的影响。第二管线进行工作以首先检测可扩展数组中每一节点每个编码号码之间的值的差,并以差分编码方式进行再编码。在再编码时,可以追踪两个值连同差分值的大概分布一起的最小差和最大差。存储最大差的值和最小差的 值以便随后在对拓朴列表进行编码前按比例对直方图进行绘制。首先将三元组分成相同大小的块。也就是第一块为 (sl, el, dl) (s2, e2, d2) ... (sb, eb, db) 以及第二块为(+1, eb+l, db+l) (sb+2, eb+2, db+2) ... (s2b, e2b, d2b) 然后针对每个与块中特定节点类型相关的三元组,基于以下各项生成三个直方图连续的三元组的起始位置之间的差(被称为△ start),也就是s2-s 1, s3-s2, s4-s3,…,sb-sb-l连续的三元组的结束位置与起始位置之间的差的差(被称为Aend), 也就是(e2-s2)-(el-sl), (e3誦s3)-(e2-s2),…,(eb-sb)-(eb-l-sb-l)连续的三元组的深度之间的差(被称为Adepth),也就是d2-dl,d3-d2, d4-d3, db画db-l每个直方图由相应A内的所有不同值组成。可以追踪每个不同值发生的 数目。也可以追踪这些不同值发生的范围。可以对直方图执行群集算法(clustering algorithm)。如果存在差分值 的多个群集,可以将可扩展数组和三个直方图划分为多个群集,并分别执行 下一步。对于每个群集,存储其最小差的值,并如最初一样,将所有差分值与最 小差进行重新对齐。这意味着现在可以用更少的位对所有差分值进行编码。而且,对于每个群集,可以检查直方图的形状并将它们划分成下面的分 周密型(Discreet):在周密型场景下,直方图能够跨越任何范围, 但所有值仅位于k个不重复的不同值的小集合中。其中k较小或大约 等于lgn。可以建立k个条目的周密型表用以存储差分值。有了lgk个 位来表示周密型表的索引,可以利用针对所有差分值的lgk〈glgn个位 而不是每个值初始的lgn个位对块进行再编码。
平坦型(Flat):不像周密型,这种场景具有相当长的范围[j,k]的 平坦曲线,其中,k-j>lgn。对直方图进行重新对齐,将j当作初始值 且将k当作k-j。与周密型情况类似,除了不需要表,可以利用每个值 的lg(k-j)个位针对所有差分值进行再编码。可以证明的是k-j远小于n, 即使当待编索引的节点的数目为n/c时,其中c为任一正常数。
下降型(Falling):对于下降型曲线,首先可以像在平坦场景中那 样,对直方图进行重新对齐,然后得出值的数组并以RLE (Run-Length Encoding,运转周期编码)方式利用它们的差分值对它们进行再编码。 这里提出简单而有效的被称为ja编码的方法。其中每个重新对齐的差 分值v被编码为两个部分首先以一元形式对l + Llogv」进行编码,接下 来是二元形式的v-2L一」的值。在这种情况下,用最少量的位对最常出 现的差分值进行编码。
上升型(Rising):如果直方图曲线的斜率朝较大值的方向向上倾 斜,还可以用M编码对其进行编码,但将直方图从左至右翻转,并对 上升型场景使用相同的方法。
正态型(Normal):也就是说,在正态分布情况下形成曲线。首 先将曲线的峰值与初始值重新对齐。首先用第一个位表示差分值的符 号,然后对差分值取绝对值,并使用RLE对其余的位进行再编码。
紧凑型(Dense):与周密型分类类似,但是更大。也就是说直方图落入k个不重复的不同值的小集合中,而k是比lgn大的较大常数, ^旦它相对n仍然4交小。因此,对于下面与节点类型b相关的拓朴编码列表 b (1,6,1) (7,12,1) (13,18,1)对直方图进行如下计算。对于起始的差,值(Astart)为6(7-1)和6(13-7)。 然后如图9所示绘制这些值的直方图。对于结束的差,值(Aend)为0((6-1)-(12-7))和0((12陽7)-(18-13))。然后如 图10所示绘制这些值的直方图。对于深度的差(厶depth),值为O(-l-l)和0(1-1)。然后如图11所示绘制 这些值的直方图。然后分析各个直方图的分布。例如,分布为上升型、下降型、正态型或 紧凑型?依据分布, 一种选择是用同一值替换所有的值并存储所使用的替换 值。或者,可以对不同的形状使用不同的可变位编码,例如,RLE,或者将 紧凑型分布供给ZL压缩。针对每个直方图,存储直方图类型(周密型、平坦型、下降型、上升型、 正态型)。在查询期间对列表的压缩形式进行解码,通过检查直方图类型, 可以确定用以对压缩形式进行解码的方式。作为带有直方图的群集的结果被传递给第三管线54。针对遵循特定规 则的XML文档,树模式经常被重复。这可以被用来在第三管线获得进一步 的空间效率。第三管线试图发现在群集的差分值内是否存在特定的模式。如 果存在这样的模式,则整个群集将被用以输出遵循该模式的值的函数所替 代。这些方法之一为用以定位重复的模式的ZLW压缩方案。在第三管线的过程之后,原来的拓朴编码列表变成了拓朴编码列表的模 式函数、差分编码列表和可扩展数组的混合列表。该结果被连接至符号表。在以上示例中,当对b进行索引编码时,如果 符号表中的条目存储了根-叶路径,则将连接回至条目{/a/b},或者如果符号 表中的条目仅由标记名组成,就连接回至条目{1)}。可以在包含模式函数、差分编码列表和扩展数组的索引的任何部分进行 更新。当更新发生时,每个块的三元组的数目不需要为常数。对于严格的规则,根本不需要对模式函数进行任何处理。然而,如果在 两个节点之间插入了不规则结构,可能需要将模式函数划分成两个单独的函 数并在它们之间插入扩展数组以存储新更新的节点。当可扩展数组达到阚值 时,然后它将通过其它的管线,就像以上所述的一样。为了在更新后最小化 空间占用量,当新的模式函数与其邻居相同时,将进行合并。下面为基于图12所示的XML文档生成SIS的具体示例。如图13所示生成符号表,其由图12的XML文档的所有的特异标记名第一管线50为符号表中的每个条目生成全拓朴编码列表,也就是说, 对于每种节点类型,为相应节点中的每一个生成三元组。在图13中示意性 地示出为实际索引生成的占位符,然后如图14所示生成该拓朴编码列表。 这些三元组存储在可扩展数组中。然后将图14的拓朴编码列表传送入第二管线52来生成图15的差分全 拓朴编码列表。如上所说明的计算差分值。也就是说,如上所描述的计算差 分值Astart、 Aend、 Adepth。在该示例中,针对每个特异标记名为每个差分值类型计算直方图。也就 是说,如图16所示绘制差分值出现的数目。图15中用灰色标出的值没有被 合并入直方图是因为它们没有前一个条目。然后将各个直方图的形状分类为 图17中列出的直方图类型之一。图18示出图16中示出的各个直方图的分 类。图17还为每个直方图分类示出固定的位编码值。这些被用于在符号表 中存储直方图类型,作为所用转换方法的指示。作为示例,图19、图20和图21示出如何利用最优差分编码存储节点 类型A的差分值。图19 (a)示出针对A start记录的值。直方图的分类记录 为100 (下降型)。已知最小的Astart值为14,因此可以用14替换直方图 的所有值并且数14被记录为替换值。由于第一个值没有包括在直方图(图15中用灰色标出的)中,该值9同样作为第一个值存储。然后为其余12个三元组(即除第一个之外的所有三元组)列出△ start值。图19 (b)示出其 余值被对齐后的图19(a),也就是说,使其余值中的每一个值均减去替换 值14。图19 (c)示出图19 (b)的可变位编码形式。对于A, Aend值和Adepth值的差分值都是相同的值,因此在这种情况 下,模式函数比直方图编码更合适。图21示出对于A的Aend,分类为001 (模式函数),可变位编码时的增量值为1 (其等于0)。图22示出A的 △ depth,也就是说分类又为001并且可变位编码时的增量值为0。然后将此信息插入到图13最初示出的符号表中来给出21中示出的表。 startA的条目从"100"开始,其指示使用形状为下降型的直方图转换函数。 结束A和深度A的条目从"001"开始,其指示使用模式函数转换。作为另外的示例,图23示出如何利用最优差分编码存储节点类型b的 厶end值。图23(a)示出为Aend记录的值。直方图的分类被记录为IIO(正 态型)。已知最小的Astart值为0,因此替换值也为0。由于第一个值没有 包括在直方图(在图15中用灰色标出的)中,该值15也被作为第一个值存 储。然后对于其余的12个三元组(即除第一个之外的所有三元组),对A start值进行列表。图23 (b)示出其余值被对齐之后的图23 (a),然而这 里替换值为0,因此,图23 (a)和图23 (b)中的其余值保持不变。图23 (c)示出图23 (b)的可变位编码方式。同样在图24中示出针对节点类型B的Astart值,并且以所命名的标记 开始。类似地,针对其它值在图25中示出符号表。这表示图12示出的文档的 索引。用方括号指定的值被作为普通整数进行存储。本领域技术人员应该理解,可以在不脱离所广泛描述地本发明宽泛的精 神和范围的情况下,对如具体实施例所示的本发明进行不同的改变和/或修 改。因此,这些实施例从各方面考虑都为解释性的,而不是限制性的。2权利要求
1、一种为以层次结构表示的数据编索引的简明索引结构,所述索引结构包括一符号表,该符号表以所有不同根-叶路径作为键标或以特异元素标记名作为键标,其中在所述符号表中,针对一键标的条目具有与该键标相关联的节点的经转换的拓扑信息及对该拓扑信息采用的转换方法的指示,并且所采用的转换方法取决于与该键标相关联的节点之间的拓扑关系。
2、 根据权利要求1所述的简明索引结构,其中所述拓朴信息包括针对每个节点的三元组编码方案。
3、 根据权利要求2所述的简明索引结构,其中所述三元组编码方案为 起始-结束-深度三元组编码方案或者为前序-后序-深度三元组编码方案。
4、 根据权利要求l、 2或3所述的简明索引结构,其中所述层次结构为 可扩展标记语言(XML)。
5、 根据权利要求1-4中任一项所述的简明索引结构,其中所述转换方 法包括对所述拓朴信息进行差分编码。
6、 根据权利要求2所述的简明索引结构,其中所述三元组编码方案为 起始-结束-深度三元组编码方案,并且所述转换方法包括对每个三元组中的 每个值进行差分编码。
7、 根据权利要求6所述的简明索引结构,其中所述三元组的第一差分 编码值为连续三元组的起始位置的差。
8、 根据权利要求6或7所述的简明索引结构,其中若给定每个节点的 起始位置和结束位置之间的差,则所述三元组的第二差分编码值为连续三元 组之间这些值的差。
9、 根据权利要求6、 7或8所述的简明索引结构,其中第三差分编码值 为连续三元组的深度的差。
10、 根据权利要求2-9中任一项所述的简明索引结构,其中所述转换方 法的信息包括一替换值,该替换值用来替换与所述键标相关联的每个节点的三元组的第一值、第二值和第三值中的每一值。
11、 根据权利要求2-10中任一项所述的简明索引结构,其中所述转换 方法的信息包括直方图的形状的指示,所述直方图绘出所有节点的三元组的 第一值、第二值和第三值中的每一值。
12、 根据权利要求2-11中任一项所述的简明索引结构,其中所述转换方法的信息包括模式函数,所述模式函数输出与所述键标相关联的所有节点 的三元组的第一值、第二值或第三值。
13、 根据权利要求1-12中任一项所述的简明索引结构,其中所述针对 一键标的条目具有多种用于转换所述拓朴信息的方法。
14、 根据权利要求1-13中任一项所述的简明索引结构,其中所述拓朴 信息从筒明数据结构中得出。
15、 根据权利要求14所述的简明索引结构,其中所述数据包括拓朴层, 所述拓朴层使用通过对所述层次数据前序遍历而生成的对称括号表示来表 示节点的嵌套。
16、 一种使用根据权利要求1-15中任一项所述的简明索引结构的方法, 包括以下步骤在所述符号表中定位所需的键标;以及基于用来转换与该键标相关联的节点的拓朴信息的转换方法,对所述经 转换的拓朴信息进行再转换,来检索与该键标相关联的所有节点的拓朴信息。
17、 根据权利要求16所述的使用简明索引结构的方法,其中所述方法 被执行来处理结构连接查询。
18、 一种为以层次结构表示的数据构造简明索引的方法,包括以下步骤 以树遍历次序解析所述数据来生成节点的拓朴编码列表,并且针对与不同根-叶路径或特异元素标记名相关联的节点,评定这些节点之间的拓朴关系;根据所述评定,对与所述不同根-叶路径或特异标记名相关联的节点的该拓朴编码列表进4亍转换;并且在一以所述不同根-叶路径或特异元素标记名作为键标的符号表中生成 一条目,该条目由与该键标相关联的经转换的拓朴信息及所采用的转换方法 的指示组成。
19、 根据权利要求18所述的构造筒明索引的方法,其中所述解析的步 骤包括对所述树进行遍历来生成拓朴编码列表,该拓朴编码列表存储于可扩 展数组中。
20、 根据权利要求18或19所述的构造简明索引的方法,其中所述拓朴 编码列表由针对每个节点的三元组编码方案组成。
21、 根据权利要求20所述的构造简明索引的方法,其中所述三元组编 码方案为起始-结束-深度三元组编码方案或者为前序-后序-深度三元组编码方案。
22、 根据权利要求18-21中任一项所述的构造简明索引的方法,其中一 旦所述可扩展数组已达到预定的块大小,则所述方法进一步包括继续生成 所述拓朴编码列表并将其存储在新块的可扩展数组中。
23、 根据权利要求20所述的构造简明索引的方法,其中所述方法进一 步包括在生成所述拓朴编码列表之后,对所述拓朴列表进行差分再编码。
24、 根据权利要求23所述的构造简明索引的方法,其中所述三元组编 码方案为所述起始-结束-深度三元组编码方案,并且所述转换方法包括对每 个三元组中的每个值进行差分再编码。
25、 根据权利要求24所述的构造简明索引的方法,其中对第一值进行 差分编码包括以第一差分编码值对三元组的第一值进行再编码,所述第一 差分编码值为连续三元组的起始位置的差。
26、 根据权利要求24或25所述的构造简明索引的方法,其中若给定每 个节点的起始位置和结束位置之间的差,则对第二值进行差分编码包括以 第二差分编码值对三元组的第二值进行再编码,所述第二差分编码值为连续 三元《且之间这些ii的差。
27、 根据权利要求24、 25或26所述的构造简明索引的方法,其中对第 三值进行差分编码包括以第三差分编码值对三元组的第三值进行再编码, 所述第三差分编码值为连续三元组的深度的差。
28、 根据权利要求20-27中任一项所述的构造简明索引的方法,其中所 述转换的步骤包括以同 一值替换与所述键标相关联的每个节点的三元组的 第一值、第二值和第三值中的每一值。
29、 根据权利要求20-27中任一项所述的构造简明索引的方法,其中所 述转换的步骤包括确定直方图的形状,所述直方图绘出所有节点的三元组 的第一值、第二值和第三值中的每一值。
30、 根据权利要求20-29中任一项所述的构造简明索引的方法,其中所 述转换的步骤包括确定模式函数,所述模式函数输出与所述键标相关联的 所有节点的三元组的第一值、第二值或第三值。
31、 根据权利要求30所述的构造筒明索引的方法,其中所述方法进一 步包括执行群集算法,并且如果确定了多个群集,则所述块被分成每个群集 的较小的块。
32、 一种用于执行根据权利要求18至31中任一项所述的为以层次结构 表示的数据构造简明索引的方法的计算机软件程序应用。
33、 一种为以层次结构表示的数据构造简明索引的计算机系统,包括 处理装置,其以树遍历次序解析所述数据来生成节点的拓朴编码列表,以及针对与不同根-叶路径或特异元素标记名相关联的节点,评定这些节点 之间的拓朴关系,并且根据所述评定,对与所述不同根-叶路径或特异标记 名相关联的节点的该拓朴编码列表进行转换;以及存储装置,其用于存储带有一以所述不同根-叶路径或特异元素标记名 作为键标的条目的索引,该条目由与该键标相关联的经转换的拓朴信息及所 采用的转换方法的信息组成。
34、 根据权利要求33所述的构造简明索引的计算机系统,其中所述存 储装置为还存储一计算机软件应用程序的计算机可读存储介质,所述计算机软件应用程序可操作地执行根据权利要求18至31中任一项所述的为以层次结构表示的数据构造简明索引的方法。
35、 根据权利要求33和34所述的构造简明索引的计算机系统,其中所 述计算机系统为诸如PDA、移动电话或膝上型电脑之类的便携式计算机。
36、 一种使用根据权利要求1-15中任一项所述的以层次结构表示的数 据的简明索引的计算机系统,包括存储装置,其用于存储所述简明索引;以及处理装置,其用于在所述符号表中定位所需的键标,并且基于用来转换 与该键标相关联的节点的拓朴信息的转换方法,对所述经转换的拓朴信息进 行再转换,来检索与该键标相关联的所有节点的拓朴信息。
37、 根据权利要求36所述的使用简明索引的计算机系统,其中所述存 储装置为还存储一计算机软件应用程序的计算机可读存储介质,所述计算机 软件应用程序可操作地执行根据权利要求16和17中任何一项所述的使用以 层次结构表示的数据的简明索引的方法。
38、 根据权利要求36或37所述的使用简明索引的计算机系统,其中所述计算机系统进一步包括用于从远程设备接收数据处理请求的通信装置。
39、 根据权利要求36或37所述的使用简明索引的计算机系统,其中所 述计算机系统为诸如PDA、移动电话或膝上型电脑之类的便携式计算机。
全文摘要
简明数据和索引结构旨在将存储容量的约束设置为接近理论最优值的同时使得对任意数据进行更新和搜索操作的效率最大化。本发明的简明索引结构对利用层次结构表示的数据编索引。索引包括以所有不同根-叶路径作为键标或以特异元素标记名作为键标的符号表,其中在符号表中,键标的条目具有与该键标相关联的节点的经转换的拓扑信息(图22)及对该拓扑信息采用的转换方法的指示(图17),并且所采用的转换方法取决于与该键标相关联的节点之间的拓扑关系。本发明还涉及用于构造、使用和更新简明索引结构的方法、计算机系统和计算机软件。
文档编号G06F17/30GK101326522SQ200680046147
公开日2008年12月17日 申请日期2006年12月5日 优先权日2005年12月6日
发明者弗兰基·兰姆, 雷蒙德·K·翁 申请人:澳大利亚国家Ict有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1