




已阅读5页,还剩27页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目 录 1 引言.1 2 索引技术概论.1 2.1 XML 索引及其分类.2 2.2 XML 数据及 XPATH查询处理 .3 2.3 XML 索引分类.5 3 基于 SQL SERVER2005 的 XML 索引.7 3.1 XML 索引在 SQL SERVER2005 中的支持 .7 3.2 建立 XML 索引数据 .7 3.2.1 主索引 .8 3.2.2 次索引 .8 3.2.3 内容索引 .10 4 基于 ORACLE 10G DB 的 XML 索引.11 4.1 什么是 ORACLE XML 数据库 .11 4.2 索引 XML 内容 .12 5 基于 DB2 9 PUREXML 的 XML 索引.13 5.1 XML 索引在 DB2 9 PUREXML 中的支持 .13 5.1.1 XML 索引的 SQL 函数类型.14 5.1.2 理解 DB 2 中 XPath 表达式7.14 5.1.3 节点类型 .15 5.2 DB2 9 PUREXML 中的 XML 索引技术 .16 5.2.1 在路径中使用 text()节点.16 5.2.2 使用 the UNIQUE 关键词 .17 5.2.3 使用 XML 命名空间 .18 6 实验对比研究.19 6.1 SQL SERVER 2005 中的实验对比研究.19 6.1.1 实验方法 .19 6.1.2 实验结果 .21 6.2 ORACLE 10G DB 中的实验对比研究.21 6.2.1 实验方法 .21 6.2.2 实验结果 .24 6.3 DB2 9 PUREXML 中的实验对比研究 .24 6.3.1 实验方法 .24 6.3.2 实验结果 .27 7 总结.29 致谢.30 参考文献.31 1 主流主流 DBMSDBMS 提供的提供的 XMLXML 数据索引对比研究数据索引对比研究 1 1 引言引言 XML(Extensible Markup Language),意为可扩展的标记语言,它是 SGML 的子集,是一套定义语义标记的规则,它也是一种元标记语言,即定 义了用于定义其他与特定领域有关的、语义的、结构化的标记语言的句法语 言。随着 XML 数据量的不断增长,要求更有效的数据管理能力和更快、更 精确的查询。为了提高 XML 数据的查询效率,特别是结构查询的效率,要 求有一种很有效的方法XML 索引技术。 XML(最新的规范为 2004 年的 XML1.1)(extensible markup language), 即可扩展的标记语言,是一套定义语义标记的规范,其目标是能够定义计算机 和人都能方便识别的数据类型.随着网络应用的快速发展,尤其是电子商务、 Web 服务等应用理念的进一步发展,使得 XML 类型的数据成为当前主流的 数据形式.对 XML 据的管理也成为研究的热点.同时,随着互联网上 XML 文档的不断增多,对这些数据的使用越来越依赖于互联网搜索引擎强大的检 索能力,对检索 XML 文档的搜索引擎的研究也就越迫切。如何将 XML 索 引技术与现代主流关系数据库(ORACLE 10G, MICROSOFT SQL SERVER 2005 和 IBM DB2 9)技术结合起来,使得检索结果更为准确,也使得传输的 数据量大大减小。 2 2 索引技术概论索引技术概论 在讨论索引技术时,主要考虑两方面的问题:一是索引的对象,既在什 么数据上面建索引;二是索引的组织结构。下面分别讨论这两方面的问题。 在关系世界中,索引的对象很简单,就是元组的某一属性。这是因为在 关系数据库里面,只有一种结构关系表,查询的时间直接查询表中的数据 项。这种索引就是值索引。然而在 XML 数据库中,查询是多种多样的。有 2 时是对 XML 文档中关键字的搜索,这类搜索可以用值索引来辅助;但是更 多的是类似于 XPath 或 XQuery 那样的查询,这时搜索不仅涉及到值,还涉 及到结构(如一个结点在文档树中的路径) ,因此,仅在某些值上建索引是 不够的。在 XML-enabled 数据库里面,由于结构信息(如一个边的路径) 往往分裂在几个表里面,因此无法对路径建索引,查找特定路径的结点往往 是通过几个表间的连接(称为 structural join 或 containment query)来实现的, 这也是 XMLenabled 数据库效率低下的原因之一。考虑到这些因素,一般 的纯 XML 数据库都对多个对象建索引,主要有:值索引,即在属性值或结 点内容上面建索引;结点名索引,即在结点标记上面建立索引;边或路径索 引,即在 XML 文档树的边上面建立索引。 再看索引的组织形式。在关系数据库中,索引的组织形式主要是 B+树 及其变体。B+树结构的优点是:它是平衡的,因而对数据项的访问代价是 基本确定的;它是扁平的,因而搜索的时候深度不是太深,访问的磁盘 I/O 不会太多;它是插入,删除和查询时的效率都是较高的,因而综合性能是很 好的。用 B+树建立值索引毫无疑问是可行的,但是用它来管理 XML 文档 的路径信息可能就不那么如意了。因为当 XML 文档的模式改变时,索引结 构以及索引项可能都做较大调整,很明显这时维护 B+树的代价是很高的。 并且 B+树对索引项的长度和索引项的数目是比较敏感的,如果要在大量长 的而且重复较少的数据项上建立索引,B+树就会快速膨胀,从而导致访问时 磁盘 I/O 的增加和更新时的繁琐,因而也不适合直接管理大量的路径信息。 另外一种常用的索引结构是哈希表。哈希表根据一个哈希函数快速将搜 索键定位到某个桶(bucket)里面,如果桶中的记录不多就可以很快找到索 引项,但是当索引项过多是,桶的空间和数目会很快增长。此外,哈希表的 性能取决于哈希函数的选择,一个糟糕的哈希函数同样可以导致索引性能低 下,而在很多情况下,在知道索引项性质之前很难选择一个理想的哈希函数。 因此哈希表也不一定适合于管理 XML 数据。 此外,还有一些传统的索引技术,如倒排列表(inverted list) ,但是它 的作用范围很有限,一般用在文本搜索或关键字查询里面,所以只作为一个 辅助索引。 2.12.1 XMLXML 索引及其分类索引及其分类 3 对XML数据建立有效的索引,是左右XML数据处理性能的重要因素.本 节归纳目前XML索引技术的研究现状,将XML索引技术分为两大类:节点记 录类索引(本身还可以分为3个小的类型)和结构摘要类索引.根据XML数据 查询处理效率以及XML数据修改对XML索引的要求,讨论了相关XML索引方 法的优点和不足。 2.22.2 XMLXML 数据及数据及 XPathXPath 查询处理查询处理3 (a)Sample.xml (b)Sample.dtd 图2-1 sample.xml和sample.dtd示例 XML规范规定了XML数据必须满足的条件,其基本的形式是XML文档.从 逻辑上讲,一个XML文档通常由5部分组成:声明、元素、注释、字符引用和 4 处理指令,为叙述方便,统称为XML数据单元.XML数据内容的限制通常由 XML模式(包括DTD和XMLSchema)来描述.图2-1为sample.xml文档及其 DTD的示意.图中root为sample.xml的根,它具有3个标签为a 的区段,而每一 个a区段都嵌套一个以b 标签为标志的区段.当给定XML 文档时,该文档也 就隐含地确定了其中所含的标记单元的顺序,称为XML顺序(XML ordering),这 一概念在XML查询处理时是需要考虑的,即查询结果中的标记单元应当具有 类似的顺序特征。 为了从XML以及半结构化数据中获取所需要的信息,研究人员开发了许 多查询语言,包括Lorel,XML-QL,XML-GL,Quilt,XPath,XQuery.它们共同的特 征为:采用了正则路径表达式的形式,其本质是捕捉XML数据单元间的结构关 系和内容.XPath是实现XML数据周游的基本语言,是XSLT,XQuery的基础. 它首先定义了XML数据的树形模型.图2-2即为图2-1的满足XPath数模型定 义的XML树.图2-2中每个元素节点左侧的数字表示该节点在前序遍历XML 树形成的节点标签序列中的序号;右侧的数字表示该节点在后序遍历XML树 形成的节点标签序列中的序号.由XPath的定义可以构建很复杂的查询语句, 主要分为3个层次:线性路径表达式、分支路径表达式和路径树。 图2-2 sample.xml对应的XML树 5 当在XML文档类数据之上处理XPath查询时,借助于W3C定义的XML数 据处理的两种接口规范,DOM(document object model)和SAX(simple API for XML),处理方式可概括为:顺序读取XML 文档中的节点;如果该节点的路径满 足XPath中定义的条件(包括结构关系、测试条件和谓词关系),那么该节点即 为XPath查询语句的一个输出.这种基本的线性表达式查询语句的处理方式存 在如下两个缺陷: (1) 只能采取周游的方式在XML文档中寻找满足查询语句结构关系的数 据单元,即为了获取满足查询路径的结果,必须周游所有可能的数据单元的标 签路径,效率不高。 以图2-2为例,要想得到文本包含“c3 c4 c5 c6”的“c”节点,那么必须 从根节点开始沿着rootabc 的路径到达.如果采取某种索引结构,可以 直接定位到目标节点,将会大大提高查询的效率。 (2) 对XML中标签路径相同的节点,仍然需要重新遍历它们的路径.这 个问题直接来自于(1)。 同样以图2-2为例,如果目标节点是c,文档中存在3条相同标签路径的节 点路径,而根据上述基本处理方式,为了搜索所有的c节点,必须对同样的路径 都要遍历.那么,将同样路径的节点汇集到同一节点中,就可以提高搜索的效 率。 2.32.3 XMLXML 索引分类索引分类 (1) 节点记录类索引 节点记录类索引本质上即是将XML数据分解为数据单元的记录集合,同 时在记录中保存该单元在XML数据中的位置信息.主要有两种获取位置信息 的方法,一种是节点序号方法(node numbering method,有时也称为节点标签 方法,node labeling method),另一种是节点路径方法(node path method).对它 们的研究占了XML数据处理研究文献中相当大的部分.根据路径信息表现形 式的不同,节点记录类索引分为3大类:基于节点序号的索引、基于节点路径 信息的索引和二者相结合的混合索引。 节点序号的基本思想:这类索引中的位置信息是节点在某种遍历序列中 的序号.对于一个XML文档,设计遍历XML文档的策略,遍历的最终结果表现 6 为一个由节点组成的序列;相应地,节点的标签在序列中就有一个序号,该序 号表明了节点间的次序关系,也能够反映节点间的结构关系,进而,就可以基 于该序号信息捕获节点间的结构关系.节点序号类XML索引的基本思想是: 基于XML文档设计某种遍历策略,得到由元素组成的序列,节点的标签在序 列中就具有唯一的次序,将序列与某指标集(最常用的就是自然数)建立一一 映射的关系,对应序列中某个标签就有唯一的序号;对任意两个具有节点序号 信息的节点,可以构建某种运算,该运算的结果可以表征节点间的结构关系, 即(独立单元属性,位置信息)结构关系映射.根据标签序列生成方式的 不同,目前研究文献中序号类索引可分为两种:基于标签有向树的遍历(如先 序遍历和后序遍历)和基于字符流模型的顺序处理.根据映射指标集的不同, 可分为赋以自然数、赋以局部编码和赋以素数的方式.在序列生成和节点序 号赋值的基础上,可以构建不同形式的位置信息,进而形成不同的节点记录索 引形式。 节点路径的基本思想:节点的路径信息同样蕴含节点在XML数据中结构 的信息:如果给定两节点的路径信息,同时预知两节点存在结构关系的情况下,就 必然可以获知它们之间的结构关系.即节点A的标签路径包含节点B的标签路 径,那么,在XML树中A和B之间一定具有祖先-子孙的结构关系,且B是A的祖 先.所以,基于路径信息来获取节点的结构关系就成为另一组XML数据处理 技术的思路来源,并演化出基于节点路径的XML索引.这类索引的核心技术是 字符串的模式匹配.因而,这类索引记录数据的管理方法,有许多是来自于信 息获取领域的。例如,Trie,Patricia trie 以及Suffix tree,甚至Suffix array 等 结构.索引记录的基本模式为(数据单元标识,路径信息).由于这类索引的大 部分处理模式与传统的模式匹配有很深的关系,在此不再展开叙述.仅对基于 路径的多维索引的概念进行简单的叙述。 (2) 结构摘要类XML索引的基本思想 以XML树结构中节点的路径信息为基础,采取某种约简方式,使得约简 后的树结构只维护不同的路径信息,而不会存在具有相同路径的两个节点.这 里,结构摘要索引仍然采取标签有向图的结构.当基于结构摘要进行XML查 询处理时,就可以避免第1节所述的基本XML查询处理的另一个缺陷。 7 3 3 基于基于 SqlSql Server2005Server2005 的的 XMLXML 索引索引 在 MS Sql Server2005 中,可以在 XML 数据类型列上创建 XML 索引。 这会将该列中 XML 实例上的所有标记、值和路径编入索引,从而提高查询 性能。在下列条件下,您的应用程序可能受益于 XML 索引:(1)对 XML 列 进行查询在您的工作负荷中很常见。必须考虑数据修改过程中的 XML 索引 维护成本;(2)XML 值相对较大,而检索的部分相对较小。生成索引可以避 免在运行时分析全部数据,并且因为受益于索引查找而提高查询处理的性能。 3.13.1 XMLXML 索引在索引在 SqlSql Server2005Server2005 中的支持中的支持 查询执行在运行时处理每个 XML 实例;如果 XML 值比较大或需要在 表的许多行中对查询进行求值,则查询执行就会变得非常费时。因此提供了 一种索引 XML 列的机制来加速查询。 B+ 树广泛用于建立关系数据库的索引。XML 列的主 XML 索引在该列 中 XML 实例的所有标记、值和路径上都创建一个 B+树索引。通过这种方式, 可以有效地对 XML 数据中的查询进行求值,并且在保留文档顺序和文档结 构的同时从 B+树重新组合 XML 结果。 可以在 XML 列中创建次 XML 索引来加速不同类别的常见查询: PATH 索引(用于基于路径的查询) 、PROPERTY 索引(用于属性包的情 况)和 VALUE 索引(用于基于值的查询) 。 3.23.2 建立建立 XMLXML 索引数据索引数据 XML 数据是以内部二进制形式存储的,存储容量可以达到 2 GB。每 个查询在运行时一次或多次地解析表中每一行的 XML BLOB。这会使查询 处理的速度变得很慢。如果在工作负荷中常常需要进行查询,则建立 XML 列的索引是有好处的,不过,这样做必须考虑在修改数据的过程中维护 XML 索引的成本。 8 XML 索引是通过一个新的 DDL 语句在类型化和非类型化的 XML 列 中创建的。这为该列中的所有 XML 实例创建了一个 B+ 树。XML 列中的 第一个索引是“主 XML 索引” 。通过这个索引,可以在 XML 列中支持三 种类型的次 XML 索引来加速普通类的查询。 .1 主索引主索引 在基表(即定义 XML 列的表)的主键中,主 XML 索引需要聚集索引。 它在 XML 节点的信息集项的一个子集中创建一个 B+树。B+树的列表示标记, 例如元素和属性名称、节点值和节点类型。其他的列捕获 XML 数据中的文 档顺序和结构,以及从 XML 实例的根节点到每个节点的路径,从而有效地 对路径表达式进行求值。基表的主键在主 XML 索引中复制,以使索引行与 基表行相关。XML 架构中给定的标记和类型名称被映射为整数值,而映射 值存储在 B+ 树中以优化存储。索引中的路径列按照相反的顺序(即从节点 到 XML 实例的根)存储映射值的串联。当路径后缀已知时(在一个路径表 达式中,如 /author/last-name),相反的表示使得可以匹配路径值。 如果 对基表进行分区,则需要以相同的方式对主 XML 索引进行分区,也就是 使用相同的分区函数和分区架构。 全部的 XML 实例都是从 XML 列检索的(SELECT * FROM docs 或 SELECT xCol FROM docs)。需要 XML 数据类型方法的查询使用主 XML 索引,从索引本身返回标量值或 XML 子树。 例:创建主 XML 索引 下面的语句在表 docs 的 XML 列 xCol 中创建一个名为 idx_xCol 的 XML 索 引。 CREATE PRIMARY XML INDEX idx_xCol on docs (xCol) .2 次索引次索引 一旦主 XML 索引创建完毕,就可以创建次 XML 索引来加速工作负荷 中不同类的查询。三种类型的次 XML 索引 -PATH、PROPERTY 和 9 VALUE ,分别对基于路径的查询、自定义属性管理方案和基于值的查询有 利。 PATH 索引在主 XML 索引的列(path, value)中构建 B+ 树。该路径的 值是通过计算路径表达式和节点的值得出的,如果提供了一个路径值,则也 可以使用所提供的值。在已知 PATH 索引开始字段的情况下,查找 PATH 索 引可以加速路径表达式的求值。最常见的情况是在 SELECT 语句的 WHERE 子句中对 XML 列使用 exist()方法。 PROPERTY 索引在主 XML 索引的列(PK, path, value)中创建 B+ 树, 其中 PK 是基表的主键。此索引对 XML 实例中的属性值查找有利。 最后,VALUE 索引在主 XML 索引的列 (value, path) 中创建一个 B+ 树。此索引对节点的值已知但是其路径没有准确地在查询中指定的查询有利。 这通常出现在祖先或自身(descendant-or-self)轴查询中,例如,/authorlast- name=Howard,其中, 元素可以出现在层次的任何一层。它还可以出现 在“wildcard”查询中,例如 /book * = novel,其中,查询查找具有 “novel”属性值的 元素。此外,VALUE 索引还可用于对类型化的 XML 进行 基于值的范围扫描。 可以容纳多达 128 层的 XML 层次;在插入和修改的过程中,如果 XML 实例包含更长的路径,则会被拒绝。 类似地,可以建立一个节点值 的前 128 个字节的索引;系统中可以容纳更长的值,但是不会建立索引。 例:基于路径的查找 假定下面的查询在工作负荷中是常见的: SELECT xCol FROM docs WHERE xCol.exist (/bookgenre=”novel”)=1 路径表达式 /book/genre 和值“novel”对应于 PATH 索引的键字段。因 此,类型 PATH 的次 XML 索引有助于此工作负荷: CREATE XML INDEX idx_xCol_Path on docs (xCol) USING XML INDEX idx_xCol FOR PATH 例:获取对象的属性 10 考虑下面的查询,它从表 T 的每一行检索书的“genre”、“title”和 ISBN 属性: SELECT xCol.value (/book/genre)1,varchar(50), xCol.value (/book/title)1,varchar(50), xCol.value (/book/ISBN)1,varchar(50), FROM docs 属性索引可用于这种情况,该索引创建如下: CREATE XML INDEX idx_xCol_Property on docs (xCol) USING XML INDEX idx_xCol FOR PROPERTY 例:基于值的查询 在下面的查询中,祖先或自己轴 (/) 指定了部分路径,这样,基于 ISBN 值的查询就可以从 VALUE 索引的使用中受益: SELECT xCol FROM docs WHERE xCol.exist(/bookISBN=”1-8610-0157-6”)=1 值索引创建如下: CREATE XML INDEX idx_xCol_Value on docs (xCol) USING XML INDEX idx_xCol FOR VALUE .3 内容索引内容索引 可以在 XML 列中创建全文本索引;这会建立 XML 值内容的索引而忽 略 XML 标记。属性值不是全文本索引的(因为它们被认为是标记的一部 分),而元素标记被用作标记边界。可以在 XML 列中创建 XML 和全文本 索引,并且组合使用全文本搜索和 XML 索引。使用全文本索引作为第一个 筛选器来缩小选择范围,接着再应用 XQuery 进一步筛选。 使用 CONTAINS()和 XQuery contains()的全文本搜索有不同的语义。 后者是子字符串匹配,而前者是使用词根检索的标记匹配。 例:在 XML 列中创建全文本索引 11 在 XML 列中创建全文本索引的步骤与在其他 SQL 类型列中创建全文本 索引的步骤是非常相似的。需要在基表中有一个唯一的键列。DDL 语句如 下,其中,PK_docs_7F60ED59 是该表的单列主键索引: CREATE FULLTEXT CATALOG ft AS DEFAULT CREATE FULLTEXT INDEX ON dbo.docs (xCol) KEY INDEX PK_doc_7F60ED59 例:组合全文搜索和 XML 查询 下面的查询检查 XML 值是否在书的标题中包含单词“Secure”: SELECT * FROM docs WHERE CONTAINS(xCol,Secure) AND xCol.exist(/book/title/text()contains(.,”Secure)”)=1 CONTAINS() 方法使用全文本索引来产生一个 XML 值的子集,它包含文 档中所有的单词“Secure”。exist() 子句确保单词“Secure”出现在书的标 题中。 4 4 基于基于 OracleOracle 10g10g DBDB 的的 XMLXML 索引索引 为索引 XML 文档提供多选择,Oracle XML DB 允许在 XML 文档中建立 许多不同的索引类型。B 树和函数索引可以在一文件集合特定的节点的文档 中建立。文本索引技术允许 XML aware 和全文索引建立在 XML 文档上。 可用的索引自动地被考虑到解决包括一个 XPath 或 XQuery 表达式的 XML 操作优选的方式。Oracle 特定的 XPath 广义函数允许 Oracle 全文搜索进行 在文本节点或属性的内容中。 4.14.1 什么是什么是 ORACLEORACLE XMLXML 数据库数据库 Oracle XML DB是用来描述Oracle数据库10g所提供的高性能XML存储 和检索技术的术语。该技术扩展了普通的Oracle关系数据库,不仅提供目前 最复杂和完整的关系数据库所提供的所有功能,还提供与原生XML数据库 所相关的所有功能。 12 Oracle XML DB提供存储独立、内容独立和编程语言独立的基础架构来 存储和管理 XML 数据。它提供了新的定位和查询数据库中所保存的XML 内容的方法并为 XML文档层次结构的管理引入了一个XML信息库。有了 Oracle XML DB,您可以同时获得关系数据库技术和XML技术的所有优点。 Oracle XML DB提供下列功能: 一个用于保存和管理XML文档的原生XML数据类型。 一套允许对XML内容进行XML操作的方法和SQL运算符。 将标准W3C XML模式数据模型吸收进Oracle数据库的能力。 XML/SQL二元性,允许XML操作SQL数据和SQL操作XML内容。 访问和更新XML的业界标准方法,包括XPath和SQL/XML。 一个允许利用文件/文件夹/ URL结构组织和管理XML内容的简单、轻 型的 XML信息库。 一个允许利用文件/文件夹/ URL结构组织和管理XML内容的简单、轻 型的XML 信息库。 一个允许利用文件/文件夹/ URL结构组织和管理XML内容的简单、轻 型的XML 信息库。 对业界标准、面向内容和FTP、HTTP、WebDAV协议的原生数据库支 持使XML 内容移入、移出 Oracle 数据库成为可能。 将Oracle数据库的企业类管理能力(可靠性、可用性、可伸缩性和坚 不可摧坚不可摧的安全)带给XML内容的能力。 4.24.2 索引索引 XMLXML 内容内容 传统关系数据库中保证查询响应时间的标准方法是创建索引,以高效的 方式解决查询。Oracle XML DB可使用相同的技术来保证查询XML内容的最 优响应时间。 在XML内容上可创建三种索引。 对于基于XML模式,并以结构化存储技术保存的XML内容,可创建 传统的B树索引。例如下面B树索引的创建: create index ipartnumber on lineitem_table x (x.part.part_number,x.nested_table_id); 13 基于函数的索引实际是所谓的常规的B树索引,但是它会基于一个应 用于表数据的函数,而不是直接放在表数据本身上。它建立在仅返回单一的 值,而非返回的值多于一的XPath表达式上。在执行查询时,利用这个索引 了解应该选取哪些行。这就意味着查询会比执行全表搜索更快。例如下面基 于函数的索引: create index fbi_idx on ipurchaseorder_reference on purchaseorder_clob (extractvalue(object_value,/ purchaseorder/ reference); 文本的索引是对任何XML文档都可创建的,无论文档内容是否使用 结构化存储保存。 Oracle XML DB在对XML内容创建索引时允许使用XPath表达式。索引 创建过程中 Oracle XML DB使用XPath重写确定包括在创建索引语句中 XPath表达式是否可被重新写入等价的对象关系SQL表达式。如果可以使用对 象关系SQL重新申明XPath表达式,那么将对底层的SQL对象创建传统的B树索 引。如果不能使用对象关系SQL重申XPath表达式,就将创建函数索引。 在关系数据库应用程序中开发人员不需要因为数据上索引的变化而改变 他们的应用程序。对Oracle XML DB这也是真的。 要点: XPath重写允许优化器分析查询并确定新的索引提供了更高效的查询 解决办法。 XMLType 和 XPath 抽象可使应用程序员开发应用程序时无需关心 底层的存储技术。与传统的关系应用程序一样,索引的创建和删除 可调整应用程序的性能,同时不需要重写程序。 5 5 基于基于 DB2DB2 9 9 pureXMLpureXML 的的 XMLXML 索引索引 在传统关系数据索引能包含由一或多个表列组成的索引关键词时,xml索 引仅对储藏在单个xml表列中的xml文件进行路径索引和值索引.这章介绍了 索引建立在DB2 9 pureXML上的xml文件.我们将介绍基本的创建索引的函数 和以及详细说明函数的其他参数。 关于创建索引函数和提供支持xml索引的新函数的基础; 如何用XPath表达式选择要进行索引的文件节点; 14 SQL数据类型用来创建XML索引关键词。 5.15.1 XMLXML 索引在索引在 DB2DB2 9 9 pureXMLpureXML 中的支持中的支持 就像关系数据库中的索引一样,在 DB2 9pureXML 中用 XML 索引来改 进查询的速度。用户应该经常建立索引来访问数据,结果在于获得选择函数 执行索引的数据。尽管索引为通常表现在获得选择函数,其它函数像插入/更 新/删除被略微减少,因为当这种函数被执行时,索引的关键词必须要被创建 或被删除.用户创造的 XML 数据索引的数目应该不仅受用户想要频繁进行 查询 XML 数据的影响,而且受用户储藏索引关键词空间的影响.索引建立得 越多,储藏索引关键词所需要的的空间就越多。 XML 索引和关系数据索引的主要区别在于: 索引应该建立在单一的 XML 列上(不允许复合关键词); 仅符合 XML 样式的文件才被索引; XML 索引每一行可以创建 0,1 或者多个关键词。 .1 XMLXML 索引的索引的 SQLSQL 函数类型函数类型 VARCHAR(n):用于带有字符串值的节点,已知字符串值的最大长度 为 n。 VARCHAR HASHED:用于带有字符串值的节点,字符串值的长度为 任意长度。该索引包含实际字符串的散列值,只能用于等式谓词,不 能用于范围谓词。 DOUBLE:用于带有任意数值类型的节点。 DATE and TIMESTAMP:用于带有日期或时间戳值的节点。 VARCHAR(n) 索引的长度是一个强制约束。如果插入一个文档,其中 索引元素或属性的值超过了最大长度 n,则插入操作将失败。同样,如果 索引元素或属性的值大于 n,则 VARCHAR(n) 索引的 create index(DB2 里用 CEATE INDEX 来创建索引) 语句将失败。DOUBLE、DATE 或 TIMESTAMP 索引不是强制约束。 15 .2 理解理解 DBDB 2 2 中中 XPathXPath 表达式表达式7 “/”符号 “/”是一个 XPath 表达的基本轴,被用来定位节点的直接子元素。 CREATE INDEX firstnameindex ON companies(doc) GENRATE KEY USING XMLPATTERN/company/emp/name/firstAS SQL VARCHAR(10) 上例中用“/”这基本轴去定位 XML 元素,和从根要素(公司)到元素 first 创造一路径,其素说明一雇员的名字。 “/”符号 通常在 XML 索引声明中使用另一轴是“/”.使用/轴去定位 XML 文档和它的子节点以及上下文中所有的后裔。 例如如果你想在 XML 文件中索引所有的 id attributes,你可以用以 下的实例: CREATE INDEX allidindex ON companies(doc) GENRATE KEY USING XMLPATTERN/idAS SQL VARCHAR HASHED “”符号 “”符号是定义元素属性路径的好帮手.在你的 XPath 表达式中, “”符号后面紧着属性名。 CREATE INDEX empsalaryindex ON companies(doc) GENRATE KEY USING XMLPATTERN/company/emp/salaryAS SQL DOUBLE CREATE INDEX deptidindex ON companies(doc) GENRATE KEY USING XMLPATTERN/company/emp/dept/idAS SQL VARCHAR(5) 前个索引为每一个员工的工资属性节点创建索引,而其次创建员工 部门的编号属性的索引。 “*”符号 星号“*”能被使用指定任何文件节点.当我们想要把有不同的子节 点编入索引时候,这星号是非常有用。 除了上面所介绍的 XPath 轴之外,DB2 9 pureXml 也提供以下 16 XPath 轴的支持: child:, descendant:, self:, descendant-or-self: and attribute:.。 .3 节点类型节点类型 DB2 9 pureXML 中支持的节点类型的是:node(),text(),comment()和 processing-instruction()。最普通的节点类型是 text()和 node()。text()节点类型 把节点的文本内容看成一体;node()跟上一节的星号“*”一样,指定任何 文件节点。 5.25.2 DB2DB2 9 9 pureXMLpureXML 中的中的 XMLXML 索引技术索引技术 DB2 9 提供了 pureXML 存储以及 XML 索引、作为查询语言的 XQuery 和 SQL/XML、XML 模式支持、对实用程序(如 Import/Export 和 Runstats)的 XML 扩展。正如在关系查询中一样,索引对于高性能的 XQuery 和 SQL/XML 是至关重要的。 .1 在路径中使用在路径中使用 text()text()节点节点 在 XPath 表达式中文本节点的存在是当它为非叶元素原理索引时产生重 要影响是重大的和应该被考虑的。 比如,考虑下面图 5-1 的 XML 元素: book titleprice Database systems29 Element Nodes Text Nodes 图 5-1 17 这个 XPath 表达式 /book/price 和 /book/price/text() 是不同的。前者识 别了元素节点 “price”,而后者指向值为 “29” 的文本节点。因此,下 面两个查询将返回不同的结果。 XQUERY for $b in db2-fn:xmlcolumn(BOOKS.BOOKINFO)/book return $b/price XQUERY for $b in db2-fn:xmlcolumn(BOOKS.BOOKINFO)/book return $b/price/text() 当节点名被使用而没 text()时,结果是连接它的文本内容和它的子文 本内容。如果就算你使用路径表达式中的 text()节点,你将仅得到当前节点 而不是它的子文本目录。 简单地说,建议不要在 XML 索引定义或查询谓词中使用 /text()。为 了支持以 /text() 结尾的任何路径表达式的谓词,可能会在 XML 模式 /text() 上定义索引。但是此类索引将包含 XML 列中所有文档的全部文本 节点值。因此,该索引是非常庞大的,并且在插入、更新和删除操作过程中 进行维护的开销也是很大的。一般情况下,应该避免使用此类索引,除非应 用程序大部分是只读的,并且确实无法预测在搜索条件中使用哪些元素。 .2 使用使用 thethe UNIQUEUNIQUE 关键词关键词 The UNIQUE 关键词能被使用在 CREATE INDEX 函数中加强唯一的 储藏单一 XML 列中所有的 XML 文件.一个节点被强制使用索引数据类型, 在映射到索引数据类型之后,它的 XML 路径和值是唯一确定的。 在 XML 文件上建立 unique 索引的句法如下: CREATE UNIQUE INDEX uniqueempindex ON companies(doc) GENRATE KEY USING XMLPATTERN/company/emp/idAS SQL DOUBLE 前面的函数将加强所有属性编号节点去配对路径表达式 /company/emp/id。 当 the UNIQUE 关键词确定时,不能包含的路径表达式的说明: desdendant: descendant-or-self: / 18 wildcards for XML name test node() or processing-instruction() for XML node kind test 当转换成索引数据类型时,unique XML文件节点值取决于双重的索引 关键词也有几种情况: DOUBLE:当储藏为DOUBLE时,无限小数的类型和64字节整数可能失 去精确性。 VARCHAR HASHED:唯一字体字符串可能取决于相同的hash值。 .3 使用使用 XMLXML 命名空间命名空间 XML命名空间在XML文件中经常被使用来获取索引含义。 考虑下列CREATE INDEX函数: CREATE INDEX firstnameindex ON companies(doc) GENRATE KEY USING XMLPATTERN/company/emp/name/firstAS SQL VARCHAR(10) 和以下图5-2的XML文件: 图 5-2 在这例子文件中,默认的命名空间是,并且所有的 文件节点都属于这命名空间。因为这,前面的索引将不跟任何文件节点配 对,因为这些节点由不属于这命名空间的路径表达式。 为了建立和前面例子中的文件节点配对的索引,我们需要给CREATE INDEX函数加命名空间的声明,使用默认的命名空间声明实现它最常用的 方法。如: 19 CREATE INDEX firstnameindex ON companies(doc) GENRATE KEY USING XMLPATTERNdeclare default element namespace AS SQL VARCHAR(10) 在XPath表达式之前使用默认命名空间声明将把跟索引的XPath表达式 配对的文件接点的索引定义为建立索引关键词。必须声明在XPath表达式 中的元素必须属于命名空间我们也可以使用在路径表 达式的命名空间的名字。或者是将一个命名空间的前缀定义为在XML路径 上的元素和属性名字来使用。如: CREATE INDEX firstnameindex ON companies(doc) GENRATE KEY USING XMLPATTERN/:company/:emp/http:/ /www.ibm:name/:first AS SQL VARCHAR(10) CREATE INDEX firstnameindex ON companies(doc) GENRATE KEY USING XMLPATTERNdeclare namespace “a=”;/a:company/a:emp/a:name/a:first AS SQL VARCHAR(10) 假如你的XML文件包含多个命名空间,你为了能索引你的文件节点可 以使用多命名空间前缀或XPath表达式中的命名空间。 6 6 实验对比研究实验对比研究 实验分别在 MS Sql Server 2005,Oracle 10g 和 DB2 Express-C 9 这三个 主流关系数据库上进行的。客户端是 Windows Server 2003。实验数据均用 XMLGEN 生成的。 6.16.1 SqlSql Server2005Server2005 中的实验对比研究中的实验对比研究 Sql Server2005 中的实验,主要比较四种关键的索引,结果得出四种索 引中哪种索引执行查询的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公园劳务服务合同标准文本
- 产品网销合同标准文本
- 供货定金合同样本
- 中宁滴灌带采购合同标准文本
- 入股购买机械合同样本
- 公司签订业务合作合同样本
- 2025《试用合同范本》
- 公司委托管理合同样本
- 事务代理合同标准文本
- 中餐预订合同标准文本
- 软测量方法原理及实际应用-课件
- 车床教学讲解课件
- 政策目标确立和方案制定概述课件
- 六年级下册英语课件-Unit 4 Lesson 23 Good-bye-冀教版(共19张PPT)
- 硬笔书法全册教案共20课时
- 张波-超高温陶瓷课件
- 特洛伊战争(英文版)
- DBJ04-T 410-2021城市停车场(库)设施配置标准
- 车站主体结构模板支架专项施工方案--终稿(专家意见修改的)-副本
- 保洁岗位培训
- 丽声北极星自然拼读绘本第二级 Pad, Pad, Pad! 课件
评论
0/150
提交评论