Transactions on Computer Science and Technology September 2015, Volume 4, Issue 3, PP.50-58
Construction of Macro Forest Transducers from XPath Xuezhi Feng 1, Husheng Liao 2, Hang Su 1 1. College of Computer Science, Beijing University of Technology, Beijing 100124, China 2. School of Computer Science, Beijing University of Technology, Beijing 100124, China #
Email: fengxuezhi@outlook.com; liaohs@bjut.edu.cn; suhang@bjut.edu.cn
Abstract With the extensive use of XML streams in the network, query technology of XML streams has been paid much attention and researched deeply. XML streams query algorithm based on macro forest transducers is considered to be one of the best query algorithms. This paper presents a construction method of macro forest transducers according to XPath expression. The expression covers the core part of the XPath query, such as PC axis, AD axis, arbitrary multiple predicates and any level of nested predicate. Experiments show that the proposed approach can support complex queries with good efficiency. Keywords: XML Streams; XPath; Macro Forest Transducers
一种为 XPath 查询构造宏森林自动机的方法 * 冯学智 1,廖湖声 2,苏航 1 1. 北京工业大学 计算机学院,北京 100124 2. 北京工业大学 软件学院,北京 100124 摘 要:随着 XML 流数据在网络中的广泛应用,针对 XML 流数据的查询技术得到了众多科研人员的关注和研究。基于 宏森林自动机的 XML 流数据查询算法被认为是最优秀的 XML 流数据查询算法之一,本文提出一种根据 XPath 查询构造 宏森林自动机的方法,该方法支持范围覆盖了 XPath 查询的核心部分,如 PC 轴、AD 轴、任意多重谓词和任意层次的嵌 套谓词。通过实验证明,本文提出的方法能够支持复杂的查询,同时具有很好的执行效率。 关键词:XML 流数据;XPath 查询;宏森林自动机
引言 很多基于网络的应用系统会持续地自动产生大量的细节数据,例如网络监控、传感器网络、航空航天 测控、气象测控和金融服务等应用系统。人们通过对系统生成的数据进行研究,从而可以实现对卫星云图 的监测、股市走向分析、网络攻击判断等。这些应用中传递的数据是一个随时间延续而无限增长的动态数 据集合,这种类型的数据被学术界称为流数据。流数据[1]具有四个特点:1)数据实时到达;2)数据到达次 序独立,不受应用系统所控制;3)数据规模宏大且不能预知其最大值;4)数据一经处理,除非特意保存, 否则不能被再次取出处理或者再次提取数据的代价昂贵。以上数据流的特点决定了数据流处理的特点:一 次存取、持续处理、有限存储和快速响应。 可扩展标记语言 XML 是一种半结构化的数据描述语言,因其具备高可读性、跨平台性和可扩展等特性, 在互联网领域被广泛应用。XML 不仅是一种优秀的数据存储格式,而且还是互联网中数据共享和交互的一 种标准。针对 XML 数据的查询匹配算法一直是数据库领域的研究热点。随着网络中数据交换量的激增, *
基金资助:受北京市自然科学基金项目(NO.4122011) 、国家自然科学基金青年基金项目(NO.61202074)支持资助。 - 50 http://www.ivypub.org/cst
“XML 流数据[2]”受到了研究者们的普遍关注。基于流数据处理的特点可知,人们需要从持续到达的海量数 据中识别出有价值的少量数据,不仅需要丰富的查询功能和强大的查询处理能力,而且应该避免占用过多 的系统资源,但现有的大部分面向传统 XML 数据库的查询机制,如小枝查询[3][4][5]等,并不适用于 XML 流 数据,这给 XML 查询处理提出了新的需求和挑战。因此,研究针对 XML 流数据的查询处理算法就变得尤 为重要。 关于 XML 流数据处理的理论和技术前人已经做了不少研究,所采用的主要方法是基于自动机的方法, 支持的查询是标准 XPath 或者 XQuery 的子集。其中 XFilter[6]和 XSQ[7]是基于有限状态自动机设计的算法, 具有比较简洁的表示形式,然而它们要么不支持谓词,要么对谓词的嵌套层次有限制,严重约束了查询的 描述能力。YFilter[8]和 XPush Machine[9]通过同时支持多个查询提高了查询效率,但是查询描述能力仍不强。 D.Olteanu 提出的 SPEX[10]算法通过多个自动机的连接,支持包含并列谓词以及嵌套谓词的 XPath 查询,但 是当查询中出现较多并列谓词或者谓词嵌套层次较多的时候,算法执行时会占用很大的内存空间,效率也 变得很低。2013 年 S. Hakuta 等人提出一种基于宏森林自动机[11]的算法[12],查询描述能力和执行效率均比之 前的算法有较大改善。其中,对 XML 流数据的查询处理技术中最关键的步骤之一是由查询语句构造等价的 宏森林自动机,而文献[12]却没有给出形式化的构造方法。 宏森林自动机是一个非常简洁的自动机模型,拥有很多优点,可以使许多静态分析问题变得容易理解, 在 XML 类型检测研究和 XML 转换技术中被多次使用。本文提出一种根据 XPath 查询语句构造宏森林自动 机的方法,可以将 XPath 查询请求转化为宏森林自动机表示的查询计划,用于 XML 流数据处理。该方法支 持更大范围的 XPath 子集,包括 XPath 查询中的 PC 轴和 AD 轴,并且支持任意多并列谓词和任意层次的嵌 套谓词,使得查询具有更丰富的描述能力。 本文组织如下:第二节介绍与本研究相关的背景知识与概念;第三节详细阐述宏森林自动机构造规则 的设计思想及具体规则;第四节通过实验展示算法的功能和性能;最后进行总结。
1
相关知识与概念 <weather date="2015-04-12"> <point id = "6185"> <name>daminghu</name> <province>Shandong <city>Jinan</city> </province> <humidity>86</humidity> <temperature>16</temperature> <timestamp>14:16</timestamp> </point> </weather>
weather date 2015-04-12
point id name province
humidity temperature timestamp
6185 daminghu Shandong city 86
16
14:16
Jinan
(a) XML 文档
(b) XML 树
图 1 天气预报数据片段
XML 数据由众多标签和文本遵循严格的嵌套规则组成,具有半结构化的树形结构,一个 XML 文档代 表一棵树。树中节点可以是不同的类型:元素节点,文本节点,属性节点,处理指令等。本文主要针对三 类核心节点:元素节点,属性节点和文本节点,进行方法论述。本文的处理方法很容易地扩展到其他类型 节点处理上。图 1 是一个使用 XML 表示的天气预报数据片段,其中(a)是原始的 XML 文档片段,(b)是(a)中 数据对应的 XML 树。 XPath(XML Path language)是一种基于路径表达式及谓词在 XML 树中找寻节点或节点集的查询语言。为 了简化问题,本文使用图 2 描述的 XPath 语言,支持 PC 轴、AD 轴,同时还支持任意多个并列谓词以及任 意层次的嵌套谓词,具有很强的表示能力。 从图 2 可以看出,一个 XPath 查询可能包含一个或多个查询步,每个查询步包含三部分:轴类型 axis、 - 51 http://www.ivypub.org/cst
节点测试 test 和谓词部分 preds。在很多应用场景中,如银行的实时交易记录,数据并不是被组织成一个严 格的 XML 树形结构,而是一个连续的 XML 片段序列。这种组织结构的数据被称为 XML 森林。
path step preds axis test
::= ::= ::= ::= ::=
step | step '/' path axis::test preds nil | [step] preds child | descendant-or-self tag
forest ::= ε | tree forest tree ::= tag<forest>, tag∈∑
图 2 XPath 语法表达式
图 3 XML 森林语法表达式
定义 1:一个 XML 森林是 t1…tn 这样的序列,其中 n≥0 并且 t1, …, tn 都是无序的树。一棵无序树由一个 带有标记的根节点和一个子树序列组成。一个 XML 森林可以由图 3 形式化表示,其中∑是输入字母表,是 XML 数据中所有标签的集合,ε 表示 XML 森林为空,tag<forest>中 tag 表示树 tree 的根节点标记,forest 表 示树 tree 的所有子树序列。 由定义 1 可知,在图 1 (b)表示的 XML 树中 id、name、province、humidity、temperature 和 timestamp 子 树组成一个 XML 森林,将此森林记为 x,point 子树就可以表示为 point<x>。节点 6185 可以看成仅有一项的 序列,用 x1 表示。如果在 x 中把除第一项 id 之外的子树序列记为森林 x2,则 x 也可以表示为 id<x1>x2。 宏森林自动机(Macro forest transducers, MFT)是 Perst 和 Seidl 于 2004 在文献[11]中提出的,是对宏树自动 机的一种扩展,更适合在 XML 森林场景中应用。 宏森林自动机是一个有限状态自动机,以一个 XML 森林作为输入,输出另一个 XML 森林树。一个宏 森林自动机可以被定义为一个元组 FM = ( State, Tag, Fun, start ),其中 State 是状态的非空的有穷集合,对于 ∀ q∈State,q 称为 FM 的一个状态。Tag 是输入字母表,即 XML 标记的有穷集合。start∈State,是 FM 的 初始状态。Fun 是转移函数的有穷集合。
FM ::= ( State, Tag, Fun, start ) State ::= Fun'(' ( Idn | State)* ')' Fun ::= Forestà Stateà State Forest ::= Tag<Forest> Forest Forest ::= nil 图 4 宏森林自动机
根据不同的输入,自动机的每一个状态有三条转移规则,分别是输入 XML 森林为空、输入满足节点测 试、输入不满足节点测试的情况。
2
宏森林自动机的构造方法 在 XML 数据处理系统里 XPath 查询执行的过程中,最核心的问题是如何把 XPath 查询语句转化为等价
的自定义静态模型。之前文献中使用的静态模型包括基于栈的结构和自动机模型,本文中选择的静态模型 是宏森林自动机。宏森林自动机不仅具有简洁描述,使人容易理解,而且非常适合流数据的处理。文献 [12] 研究了基于宏森林自动机的 XML 流数据处理技术,却没有给出构造宏森林自动机的形式化方法,而此方法 恰恰是该技术的核心。本文提出一种将 XPath 查询语句转化为宏森林自动机的方法,补充了文献[12]的缺陷。
2.1 设计思想 由 XPath 查询语句构造自动机的方法,通常以语句中的查询步为基本单元进行设计。如 XSQ[7] 和 SPEX[10]就针对不同类型的查询步,设计出相应的查询步自动机模板,并根据这些模板去构造相应的自动机, 然后将结果组合在一起,得到与完整 XPath 查询对应的查询计划的中间表示。本课题也以 XPath 中的查询步 为基本单元设计宏森林自动机的构造算法。 - 52 http://www.ivypub.org/cst
为 方 便 表 述 , 本 文 将 一 个 XPath 查 询 的 路 径 表 示 分 为 主 干 路 径 和 分 支 路 径 , 例 如 在 查 询 语 句 /weather/point[province/city]//temperature 中,将/weather/point//temperature 称为主干路径,将谓词[province/city] 对应的分支称为分支路径。主干路径中每一个查询步返回的结果都是满足当前查询步的节点集合,而分支 路径的返回结果只是用来标记谓词是否得到满足,进一步筛选目标节点集合。因此主干路径和分支路径对 应不同的宏森林自动机构造规则,分别记为Τ和Ρ(图 5)。 本文中宏森林自动机的状态记为 q,输入的 XML 数据流记为 xs,把数据中的一个元素看作具有一个元 素的流,则 xs 可以用 XML 森林表示。由 XML 森林的定义可知,xs 可以表示为 test<x1>x2,其中 test<x1>是 XML 森林 xs 的第一项(标记为 test 的树),x1 是树 test<x1>的子树序列,x2 是 xs 的后续剩余项。本文使用 函数式表示每个状态 q 的处理过程。具体如下: 主干路径中查询步对应的状态 q 只有一个输入 xs,返回结果 sub_xs,xs 和 sub_xs 均为 XML 森林。状态 q 对应的处理过程记为 q(xs) = sub_xs。 分支路径中查询步对应的状态 q 有三个输入,分别是待查询数据 xs、分支满足时的返回值 y1 和分支不 满足时的返回值 y2,其中 xs、y1 和 y2 都是 XML 森林。q 对应的处理过程记为 q(xs, y1, y2) = y1 或者 q(xs, y1, y2) = y2。 在主干路径中,根据查询步的两种轴类型和有无后续查询步,将查询步分为四种类型:child::test preds、 desc-or-self::test preds、child::test preds path 和 desc-or-self::test preds path,分别对应宏森林自动机构造规则 Τ-1、Τ-2、Τ-3 和 Τ-4。 以查询/weather/point[province/city]//temperature 为例,查询步/point[province/city]符合 child::test preds path 模式,其中轴类型为 child,节点测试 test 为 point,谓词 preds 为[province/city],后续查询步 path 为 //temperature。将查询步/point[province/city]在森林自动机中对应的状态记为 q,谓词 province/city 对应的状 态记为 q’,后续查询步//temperature 对应的状态记为 q’’。状态 q 遇到 3 种不同的 XML 森林输入 xs 时,会有 以下不同处理过程: 1.当 xs 为空 XML 森林 ε 时,返回值肯定为 ε。 2.当 xs 中第一项的标记不是 point 时(xs = %t<x1>x2,用%t 标记不为 point 的其他标记),第一项对应 的返回值为 ε,则只需处理 xs 中的后续项 x2。所以此时状态 q 处理过程是 q(x2)。 3.当 xs 中第一项的标记为 point 时(xs = point<x1>x2),如果第一项 point<x1>满足谓词[province/city], 第一项对应的后续处理为 q’’(x1),如果第一项不满足谓词条件,第一项的返回值为 ε,因此第一项的处理可 以记为 q’(x1, q’’(x1), ε)。后续项 x2 的处理同第 2 种,因此可以整体的处理可以表示为 q’(x1, q’’(x1), ε)q(x2)。 将上述处理过程进行整理,可以表示为图 5 (a)中 Τ-3 规则。 在分支路径中,根据谓词是不是 nil 和查询步的两种轴类型,将谓词分为三种类型:nil, [child::test preds]preds’和[desc-or-self::test preds]preds’,分别对应宏森林自动机构造规则 Ρ-1、Ρ-2 和 Ρ-3。假设输入流 为 xs = test<x1>x2,两种返回结果分别记为 y1 和 y2。 针对[child::test preds]preds’类型,即 PC 轴的多谓词检查时,当且仅当输入 XML 流 xs 满足以下 4 种情 况之一时,多谓词才能得到满足: case1: test<x1>满足[child::test preds]和 preds’; case2: x2 满足[child::test preds]和 preds’; case3: test<x1>满足[child::test preds]且 x2 满足 preds’; case4: x2 满足[child::test preds]且 test<x1>满足 preds’。 以查询./point[province[.//Jinan]][pressure]//temperature 为例,分支路径[province[.//Jinan]][pressure]符合 [child::test preds]preds’模式,其中轴类型为 child,节点测试 test 为 province,谓词 preds 为[.//Jinan],后续谓 词 preds’为[pressure]。将查询步[province[.//Jinan]][pressure]在森林自动机中对应的状态记为 q,谓词[.//Jinan] - 53 http://www.ivypub.org/cst
对应的状态记为 q’,后续查询步[pressure]对应的状态记为 q’’,[province[.//Jinan]]对应的状态表示为 q’’’。 当状态 q 遇到 3 种不同的 XML 森林输入 xs 时,会有以下不同处理过程: Τ〖child::test preds〗 = q (Τ-1) where q(test<x1>x2) = q’(x1, test<x1>, ε) q(x2) q(%t<x1>x2) = q(x2) q(ε) = ε q’ = Ρ〖preds〗 Τ〖desc-or-self:test preds〗 = q (Τ-2) where q(test<x1>x2) = q’(x1, test<x1>, ε) q(x1) q(x2) q(%t<x1>x2) = q(x1) q(x2) q(ε) = ε q’ = Ρ〖preds〗 Τ〖child::test preds path〗 = q (Τ-3) where q(test(x1)x2) = q’(x1, q"(x1), ε) q(x2) q(%t(x1)x2) = q(x2) q(ε) = ε q’ = Ρ〖preds〗 q" = Τ〖path〗 Τ〖desc-or-self::test preds path〗 = q (Τ-4) where q(test<x1>x2) = q’(x1, q"(x1) , ε) q(x1) q(x2) q(%t<x1>x2) = q(x1) q(x2) q(ε) = ε q’ = Ρ〖preds〗 q" = Τ〖path〗
Ρ〖nil〗 = q (Ρ-1) where q(xs, y1, y2) =y1 Ρ〖[child::test preds] preds’〗 = q (Ρ-2) where q(test<x1>x2, y1, y2) = q’(x1, q”(test<x1>x2, y1, y2), q”’(x2,q”(test<x1>x2, y1, y2), y2) q(%t<x1>x2, y1, y2) = q”’(x2, q”(test<x1>x2, y1, y2), y2) q(ε, y1, y2) = y2 q’ = Ρ〖preds〗 q” = Ρ〖preds’〗 q”’= Ρ〖[child::test preds]〗 Ρ〖[desc-or-self::test preds] preds’〗 = q (Ρ-3) where q(test<x1>x2, y1, y2) = q’(x1, y3, q”’(x1, y3, q”’(x2, y3, y2))) where y3 = q”(test<x1>x2, y1, y2) q(%t<x1>x2, y1, y2) = q”’(x1, y3,q”’(x2, y3, y2)) where y3 = q”(test<x1>x2, y1, y2) q(ε, y1, y2) = y2 q’ = Ρ〖preds〗 q” = Ρ〖preds’〗 q”’ = Ρ〖[desc-or-self::test preds]〗
(a) 主干路径构造规则
(b) 分支路径构造规则
图 5 宏森林自动机构造规则
1.当 xs 为空 XML 森林 ε 时,不满足上面的四种 case,谓词不能满足,所以返回值 y2; 2.当 xs 中第一项的标记不是 province 时(xs = %t<x1>x2):由 case2 和 case4 可知需要检验 xs 中后续项 x2 是否满足谓词[province[.//Jinan]]。如果 x2 满足谓词[province[.//Jinan]],则需检验 xs 是否满足后续谓词 [pressure],如果 xs 满足后续谓词,按照约定应该返回 y1,其他情况均返回 y2。这种情况下整个处理过程可 以表示为 q’’’(x2, q’’(province<x1>x2, y1, y2), y2); 3.当 xs 中第一项的标记为 province 时(xs = province<x1>x2):如果第一项 province<x1>满足谓词[.//Jinan], 则需检验 xs 是否满足后续谓词[pressure],如果 xs 满足后续谓词,即 case1 或者 case3,按照约定应该返回 y1, 否则返回 y2 。如果第一项 province<x1>不满足谓词[.//Jinan],则需检验 xs 中后续项 x2 是否满足谓词 [province[.//Jinan]] , 后 续 项 x2 的 处 理 类 似 第 2 种 处 理 过 程 。 因 此 整 体 处 理 可 以 表 示 为 q’(x1, q’’(province<x1>x2, y1, y2), q’’’(x2, q’’(province<x1>x2, y1, y2), y2))。 将上述处理过程进行整理,可以表示为图 5 (b)中 Ρ-2 规则。Ρ-1 规则表示谓词为 nil 的情况,即实际查 询步中不存在谓词,则对于任何输入,谓词条件均满足,所以返回值为 y1。
2.2 构造案例 将查询./point[province[.//Jinan]][pressure]//temperature 根据图 2 XPath 的语法分解为多个基本单元,然后 按照规则Τ和Ρ构造成宏森林自动机。具体的构造过程和使用的规则如图 6 所示: 在实现中谓词 nil 对应的自动机状态是共享的,因此图 6 中 q7、q8、q9、q11、q12、q14 和 q15 仅对应一个 状态。q4 和 q10 对应相同的查询单元,在实现中这两个状态对应同一个状态,同理 q5 和 q13、q6 和 q16。
2.3 计算复杂度分析: 由定义可知宏森林自动机是一个确定的自动机,例如当某个自动机状态 q 遇到特定的流输入节点时,最 - 54 http://www.ivypub.org/cst
多只对应一条转移规则。从自动机的构造规则Τ可以看出,主干路径上的一个 step 对应自动机中一个状态; 从构造规则Ρ中可以看出,分支路径上的一个 step 对应自动机中一个或两个状态(实现中谓词 nil 对应的状 态是共享的,如上一节例子中 qi)。对于查询语句 path,假设 path 中主干路径中 step 总数为 m,分支路径 中 step 总数为 n。由前面分析可知,path 对应的宏森林自动机中状态总数不超过 m + 2n,即宏森林自动机对 应的空间复杂度为 O(m + 2n)。很多确定的自动机[9][13]在处理有谓词的 XPath 语句时,自动机的状态数目会 呈指数成长,宏森林自动机避免了这个缺陷。 q1 = Τ〖./point[province[.//Jinan]][pressure]// temperature〗(适用Τ-3规则) q1(point<x1>x2) = q2(x1, q3 (x1), ε) q1 (x2) q1 (%t<x1>x2) = q1 (x2) q1 (ε) = ε q2 = Ρ〖[province[.//Jinan]][pressure]〗 (适用规则Ρ-2) q2 (province<x1>x2, y1, y2) = q4 (x1, q5(test<x1>x2, y1, y2), q6 (x2, q5(province<x1>x2, y1, y2), y2)) q2 (%t<x1>x2, y1, y2) = q6 (x2, q5 (test<x1>x2, y1, y2), y2) q2 (ε, y1, y2) = y2 q3 =Τ〖// temperature〗 (适用规则Τ-2) q3 (temperature<x1>x2) = q7 (x1, temperature< x1>, ε) q3(x1) q3(x2) q3 (%t<x1>x2) = q3(x1) q3(x2) q3 (ε) =ε q4 = Ρ〖[.//Jinan]〗 (适用规则Ρ-3) q4 (Jinan<x1>x2, y1, y2) = q8 (x1, y3, q10 (x1, y3, q10 (x2, y3, y2))) where y3 = q9 (Jinan<x1>x2, y1, y2) q4 (%t<x1>x2, y1, y2) = q10(x1,y3, q10(x2, y3, y2)) where y3 = q9 (test<x1>x2, y1, y2) q4 (ε, y1, y2) = y2 q10 = Ρ〖[.//Jinan]〗= q4 (适用规则Ρ-3) q5 = Ρ〖[pressure]〗 (适用规则Ρ-2) q5(pressure<x1>x2, y1, y2) = q11(x1, q12(pressure<x1>x2, y1, y2), q13(x2, q12(pressure<x1>x2, y1, y2), y2)) q5 (%t<x1>x2, y1, y2) = q13 (x2, q5 (test<x1>x2, y1, y2), y2) q5 (ε, y1, y2) = y2 q13 = Ρ〖[pressure]〗= q5 (适用规则Ρ-2) q6 = Ρ〖[province[.//Jinan]]〗 (适用规则Ρ-2) q6 (province<x1>x2, y1, y2) = q14 (x1, q15 (province <x1>x2, y1, y2), q16 (x2, q15(province<x1>x2, y1, y2), y2)) q6 (%t<x1>x2, y1, y2) = q16(x2,q15(test<x1>x2, y1, y2), y2) q6 (ε, y1, y2) = y2 q16 = Ρ〖[province[.//Jinan]] 〗= q6 (适用规则Ρ-2) qi = Ρ〖nil〗 (适用规则Ρ-1) qi(xs, y1, y2) = y1, 其中i = 7, 8, 9, 11, 12, 14, 15 图 6 宏森林自动机构造案例
3
实验
3.1 算法实现 作者以上述构造规则为核心,设计并实现了针对 XML 流数据的查询系统。系统实现使用 java 作为开发 语言,JRE 版本为 1.7。查询系统主要包括 XML 数据流化模块、XPath 查询解析模块、宏森林自动机构造模 块和查询执行引擎四个模块。其中 XML 数据流化模块使用 StAX 软件包将 XML 文档解析为连续的元素事 件;XPath 查询解析模块根据图 2 XPath 语法,将初始查询语句解析为对应的基本查询单元;宏森林自动机 构造模块的核心是根据图 5 中的构造原则设计的自动机构造算法,本模块任务是将 XPath 查询解析模块得到 的基本查询单元构造成语义等价的宏森林自动机;查询执行引擎模块把数据流化模块的输出作为输入,根 据宏森林自动机中的状态和转移函数,输出自动机识别的目标数据。 - 55 http://www.ivypub.org/cst
3.2 实验环境 本节对上述查询系统进行测试,测试环境为一台 HP Z400 台式工作站,配置 CPU Intel Xeon W3505 2.53GHz、内存 8G、64 位 Windows 7 操作系统,运行环境为 Java(JRE)版本 1.7。 实验采用的数据集是根据 6 个不同参数生成的不同大小的 XMark 数据集,如果表 1 所示。 实验中使用的查询案例如表 2 所示,分为三组,其中 Q1.1-Q1.3 只包含 AD 轴和 PC 轴不包含谓词, Q2.1-Q2.3 包含简单的谓词,Q3.1-Q3.3 包含复杂的嵌套谓词或者并列谓词。 表 1 XMark 基准测试集 编号 1 2 3 4 5 6
大小(MB) 11 115 581 1164 1749 2333
XMark参数 0.1 1 5 10 15 20
节点数(百万) 0.16 1.7 8.4 16.7 25.1 33.4
表 2 XPath 测试案例 编号 Q1.1 Q1.2 Q1.3 Q2.1 Q2.2 Q2.3 Q3.1 Q3.2 Q3.3
XPath Query //open_auction/bidder/time //item/description//text//emph //categories/category//description//listitem/parlist //open_auction[./initial]//bidder/increase //item[./location]/description//text//emph/bold //category[./name]//description//listitem[./keyword]/parlist //item[./location][.//mailbox/mail//emph]/description//text//emph //item[./location][.//mailbox/mail//emph][./shipping]/description//text//emph/bold //open_auction[./type][.//description//listitem[.//keyword]/parlist[.//emph]]//bidder/personref 表 3 测试案例对应宏森林自动机状态数目
编号 Q1.1 Q1.2 Q1.3 Q2.1 Q2.2 Q2.3 Q3.1 Q3.2 Q3.3
查询中step总数 3 4 5 4 6 6 8 10 9
主干路径step数 3 4 5 3 5 4 4 5 3
分支路径step数 0 0 0 1 1 2 4 5 6
宏森林自动机状态数目 4 5 6 5 7 7 10 13 12
3.3 测试结果及分析 为检验本文提出的宏森林自动机构造规则的正确性,作者在表 1 六个 XML 数据集上分别使用表 2 中的 查询进行测试,并将得到的查询结果与 QizxOpen 和 XMLSpy 查询引擎得到的查询结果进行对比,确保相互 一致。在实际测试中使用了更多的数据集和查询语句,结果表明以本文的宏森林自动机构造规则为核心的 查询系统可以正确地完成查询任务,验证了构造规则的正确性。 针对表 2 中的每一个查询案例,在实验过程中统计了 1)主干路径中分支路径中 step 数目,2)分支路 径中 step 数目,3)宏森林自动机状态数目。具体的统计结果如表 3 所示: 分析查询案例 Q1.1、Q1.2、Q1.3 中主干路径中 step 数目 m 和对应的宏森林自动机状态数目 N,可知对 于没有谓词的查询案例,自动机状态数目 N 与主干路径中 step 数目成线性关系。分析查询分析查询案例 - 56 http://www.ivypub.org/cst
Q2.1、Q2.2、Q2.3、Q2.1、Q2.2、Q2.3 中主干路径中 step 数目 m、分支路径中 step 数目 n 和对应的宏森林 自动机状态数目 N 的关系,可知对于有谓词的查询案例,不管是简单谓词还是复杂谓词,都满足 N<m+2n。 这些统计数据验证了 3.3 节中自动机空间复杂度分析的正确性,即由本文的构造规则得到的宏森林自动机的 空间复杂度为 O(m + 2n)。 在测试宏森林自动机查询算法的效率时,本文以 XML 数据流的查询执行时间 T 作为衡量依据。T = ttotal - tin - tout,其中 ttotal 为 XML 数据流处理的总时间,tin 为从磁盘上读入 XML 文档并对其进行解析的时间,tout 为从内存向磁盘中输出查询结果的时间。
Q1
4500
4000
4000
3500
3500 Query TIme T (ms)
Query Time T (ms)
Xmark基准测试集6
3000 2500 2000 1500 1000
Q2
Q3
3000 2500 2000 1500 1000 500
500 0
0
Q1.1
Q1.2
Q1.3
Q2.1
Q2.2
Q2.3
Q3.1
Q3.2
Q3.3
图 7 在 XMark 测试集 6 上各查询案例的执行时间
11M
115M
581M
1164M
1749M
2333M
图 8 不同大小 XMark 测试集上各组查询的执行时间
图 7 反映了表 2 中各测试案例在表 1 中编号为 6 的 XMark 测试集上的执行时间。其中 Q1.1、Q1.2 和 Q1.3 测试案例中都不包含谓词,并且测试案例中查询步数目依次增加。由图 7 中数据可以看出,在没有谓 词的情况下,查询需要的执行时间随着查询步数目的增加而增长。测试案例 Q2.1 和 Q2.2 中都只有一个谓词, 但 Q2.2 中主干路径中查询步较多,从图 7 中可知 Q2.2 执行时间较长。测试案例 Q3.1、Q3.2 和 Q3.3 的谓词 都比较复杂,Q3.2 主干中查询步最多,所需执行之间也最长。因此可知在查询案例中谓词类似时,查询所 需的执行时间随主干路径路径总查询步数目的增加而增长 图 8 反映了三组查询 Q1、Q2 和 Q3 在不同大小 XMark 测试集上的平均执行时间。三组查询 Q1、Q2 和 Q3 在主干路径中平均查询步数目相同,但谓词复杂度逐渐增加。由图 8 可知,在每一个 XMark 测试集上, 三组测试案例的平均执行时间都递减的。所以我们可以得出,在主干路径中查询步数目相同时,随着谓词 的复杂度增加,查询所需的执行时间而减少。 根据实验数据,我们对本文提出的算法进行吞吐量的计算,即查询处理的数据量(MB)与查询时间(s)的 比值。因为随着数据量不断增大,算法的吞吐量会逐渐趋于稳定,而图 7 中使用的 XMark 测试集 6 的大小 为 2333MB,因此我们根据图 7 中的数据计算算法的吞吐量。对于平均查询步数目为 6 的查询,本文的算法 吞吐量可以达到 737MB/s。
4
结语 本文研究由 XPath 语言表示的查询构造宏森林自动机的方法。文献[12]提出的基于宏森林自动机的 XML
流数据处理技术,与当前其他 XML 流数据处理相关技术[6,7,8,9,10,13]比较,文献[12]的技术有明显的优势,但是 文献[12]中并没有给出构造宏森林自动机的形式化方法。本文提出的宏森林自动机构造方法能够支持 XPath 查询中 PC 轴、AD 轴,同时支持包含任意层嵌套谓词以及多谓词的 XPath 查询,覆盖了 XPath 的核心查询, 扩大了对 XPath 查询的支持范围,增加了流数据上查询的多样性,更好地满足了用户的查询需求。实验表明 了本文提出宏森林自动机构造规则的正确性,而且扩大了对 XPath 的支持范围,同时还能够高效地处理 XML 流数据。 - 57 http://www.ivypub.org/cst
REFERENCES [1]
Babcock B., Babu S., Datar M. et al. Models and Issues in Data Stream Systems[C] Proceedings of the 21st ACM SIGMODSIGACT-SIGART Symposium on Principles of Database Systems (PODS 2002), June 3, 2002 - June 5, 2002, Madison, WI, United states: Association for Computing Machinery, 2002, 1-16
[2]
Weidong Y., Baile S. A Survey of XML Stream Management [J]. Journal of Computer Research and Development, 2009, 10: 018
[3]
Qin Lu, Yu J X, Ding Bolin. TwigList: Make twig pattern matching fast[C] in Proc of DASFAA’07. 2007. Thailand, Springer, 850-862
[4]
Bruno N., Koudas N. and Srivastava D. Holistic Twig Joins: Optimal Xml Pattern Matching[C]. Proceedings of the 2002 ACM SIGMOD international conference on Management of data, 2002.Madison, Wisconsin, ACM, 310-321
[5]
Lu Jiaheng, Ling T W, Bao Zhifeng, et al. Extended XML Tree Pattern Matching: Theories and Algorithms [J]. IEEE Trans on Knowledge and Data Engineering, 2011, 23(3): 402-41
[6]
Altinel M., Franklin MJ.. Efficient Filtering of XML Documents for Selective Dissemination of Information[C]. Proc. of the 26th Int’l Conf. on Very Large Data Bases. Cairo: Morgan Kaufmann Publishers, 2000: 53-64
[7]
Peng F., Chawathe S. XPath Queries on Streaming Data [J]. Proc. of the 2003 ACM SIGMOD Int’l Conf. on Management of Data. 2003: 431-443
[8]
Diao YL., Altinel M., Franklin M, Zhang H, Fischer P. Path Sharing and Predicate Evaluation for High-performance XML Filtering [J]. ACM Trans. on Database System. 2003, 28(4): 467-516
[9]
Gupta A., Suciu D. Stream Processing of XPath Queries with Predicates [J]. Halevy AY, Ives ZG, Doan A, eds. Proc. of the 2003 ACM SIGMOD Int’l Conf. on Management of Data. San Diego: ACM Press, 2003. 419-430
[10] Olteanu D. Spex: Streamed and Progressive Evaluation of XPath [J]. IEEE Trans. Knowl. Data Eng. 2007, 19(7): 934-949 [11] Perst T. and Seidl H. Macro Forest Transducers. Inf. Process. Lett., 89(3), 2004: 141-149 [12] Hakuta S., Maneth S., Nakano K. and Iwasaki H. XQuery Streaming by Forest Transducers. In: ICDE 2014, pp. 417-428 [13] Green T.J., Miklau G., Onizuka M.and Suciu D. Processing XML Streams with Deterministic Automata[C]. Lecture notes in computer science. Springer, 2003: 173-189
【作者简介】 1
冯学智(1990-),男,汉族,硕士研
2
廖湖声(1954-),男,汉族,北京工
究生,主要研究领域为 XML 数据库技
业大学教授、博士生导师,主要研究领
术。
域为软件自动化方法,编译技术、XML
Email: fengxuezhi@outlook.com
数据处理、程序分析与程序变换。 Email: liaohs@bjut.edu.cn
3
苏航(1978-),男,汉族,博士,讲
师,主要研究领域为编译技术、XML 数 据处理、程序分析与程序变换。 Email: suhang@bjut.edu.cn
- 58 http://www.ivypub.org/cst