基于关系型数据库引擎的"XML"索引技术

2008-02-23 05:51:13来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

XML(可扩展标记语言)已成为Web应用中数据表示和数据交换的标准,随着Internet的快速发展,尤其是电子商务,Web服务等应用的广泛使用,XML类型的数据成为当前主流的数据形式。因此XML数据的管理技术尤其是XML数据查询技术成为当前的研究热点。

相比起关系型数据,XML有着各种各样的优点,但有个最大的缺陷就是它的效率。因为关系型数据文件中,数据的字段名只需出现一次即可,而XML数据文件中,元素名将反复出现,这必须会影响到查询的效率。为了尽可能的提高XML的查询效率,需要为XML类型提供了索引功能。

万维网联盟于2007年1月23日将XPath2.0和XQuery1.0确定为推荐标准,结束了此前各种查询语言群雄逐鹿的局面。 基于此标准, 除传统厂商外,各科研机构纷纷提出了对XPath和XQuery的实现(文献中提及的有十数种),其存储模型不同,查询算法各异,优化途径也各有所长,在这样的背景下,达梦数据库公司根据自身发展战略,也提出了自己的XML查询引擎模型,目前,达梦的XML查询引擎正在紧张开发中,而对XML数据建立有效的索引是影响XML数据查询性能的重要因素。在深入分析当前已有的数据库产品的索引技术基础上为达梦XML查询引擎设计一种较为合理的索引结构,以使该引擎能发挥较优性能。

XML索引技术简介

目前,人们对XML的研究主要分为两个方面。一个是对XML这种半结构化数据的存储、查询和管理的的原生数据库,其中的数据和元数据完全采用XML结构表示,与其底层的数据存储格式(如对象模型、关系模型等)无关。另一个是它与关系数据库之间的相互转换,利用关系数据库的成熟技术对XML数据进行处理。由于后一个方向比较有现实意义,因此成了XML研究中的重点。

而除了存储方案之外,索引技术也是决定一个数据库系统最重要的因素之一。如果对XML文档不构建索引结构,那么针对XML数据的任何查询都很可能导致对整个文档树的遍历,随着XML数据集的增大,这种开销是不可忍受的。故此,对XML索引技术的研究具有较高的理论和实用价值。

虽然传统的索引技术经过长期的积累已经相对成熟,但是,这类索引技术针对的主要是根据值(而不是具有某种关系的模式)定位数据记录的功能,不太关注数据记录间的逻辑关系;而 XML 数据查询的基本特征就是根据模式特征(正则路径表达式形式描述的结构关系)的输入提取符合该模式的数据,所以,XML 索引的主要内容就是设计适用于模式匹配的技术。

XML索引分类

基于路径的XML索引

基于路径的索引是以XML树结构中节点的路径信息为基础,采取某种约简方式,使得约简后的树结构只维护不同的路径信息,而不会存在具有相同路径的两个节点。 已经提出的这类索引有:DataGuides索引、Index Fabric索引、XML数据的自适应路径索引(Adaptive Path Index for XML Data, APEX )

Dataguides 索引是从根结点为起始的精练路径的一种结构摘要。边标签串联在一起形成的字符串路径在 Dataguides 中只描述一次。Dataguides 减少了遍历路径查询时所需的部分结点,它对从根部遍历 XML文档是有效的。但对于含有通配符的路径查询或对带有XPath标准中定义的descendant-or-self轴的路径查询要进行多次的连接操作,查询效率较低,并且存在数据冗余。

然后编写关于这2个大字段的Java对象文件TestLob.java,分别定义类型为CLOB和BLOB属性字段为String和byte[]类型,其中由于CLOB是处理大文本类型所以它对应了Java中的String类型,BLOB是处理一些以二进制流形势存储的没有严格定义的大文件所以让它使用byte[]类型,然后分别定义这2个属性的Getter和Setter方法,相关代码如下:

Dataguides 索引是从根结点为起始的精练路径的一种结构摘要。边标签串联在一起形成的字符串路径在 Dataguides 中只描述一次。Dataguides 减少了遍历路径查询时所需的部分结点,它对从根部遍历 XML文档是有效的。但对于含有通配符的路径查询或对带有XPath标准中定义的descendant-or-self轴的路径查询要进行多次的连接操作,查询效率较低,并且存在数据冗余。

Index Fabric是在Patricia Trie树上发展而来的一种索引结构,它把到每个元素节点的每条标记路径都用一个字符串编码,再将这些编码值插入到Patricia Trie树中去,从而将按照路径方式对XML数据的查询转化为对字符串的查询。在查询时先将查询路径编码成字符串的形式,再在索引树中进行查找。Index Fabric索引优点是存储了XML数据的层次结构信息,统一处理了有模式和无模式信息情况下的XML数据的检索,并且使对XML数据的查询和更新所需要的时间与层次相关而不是与索引关键字的长度相关。Index Fabric索引的缺点在于丢失了元素节点间的结构关系,因为它只保留了有文本值的元素节点的信息。因此,与DataGuides索引类似,Index Fabric索引处理带有XPath标准中定义的descendant-or-self轴的部分匹配查询表达式效率不高

为此,APEX[14]引入了依赖于XML数据查询分布的信息:将经常出现的XML查询语句对应的标签节点预先保存在一个哈希结构中。它的作用类似于Cache的功能:当有新的查询要求处理时,首先在哈希表中搜索是否有满足的节点集合。但它对于带有元素值或属性值的查询表达式的处理效率较低。

基于节点的索引

基于节点的索引本质上即是将XML数据分解为数据单元的记录集合,同时在记录中保存该单元在XML数据中的位置信息。与基于路径的索引不同,基于节点的索引打破了必须通过标签路径查找节点这一限制,将XML数据分解成规范形式的节点记录。由于保存了节点的位置信息,而且能够很好地结合到成熟的关系数据库管理系统中,因此它是目前应用最广泛的一种索引。

根据对位置信息的编码方式不同,基于节点的索引一般可以分为一下几类:

1. 基于前缀的索引

基于前缀的索引主要是根据Dewey[12]编码生成的索引,文献[13]的 ORDPATH 编码采用的也是类似的方法,并给出了压缩 ORDPATH的方法,该方法已应用于SQL Server 2005的索引组织中。


前缀编码的基本思想是直接将一个节点的双亲节点的编码作为该节点编码的前缀,对于前缀编码,要判断一个节点v是否另一个节点u的后裔,只要判断u的编码是否v的编码的前缀。前缀编码索引的一个重要性质是它们的字典有序:以节点r为根的子树中的任意一个节点u,它的前缀编码c(u)大于(小于)它的左兄弟子树(右兄弟子树)中所有节点的前缀编码。因此,基于前缀的索引不仅能够有效地支持包含关系的运算,而且能够有效地支持文档位置关系的计算。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:FireFox对XML的处理兼容IE的节点处理方法

下一篇:XSL简明教程(1)XSL入门