相比起关联型数据,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)大于(小于)它的左兄弟子树(右兄弟子树)中一切节点的前缀编码。因而,基于前缀的索引不仅能够有用地支撑包括关联的运算,而且能够有用地支撑文档位置关联的盘算。
2. 基于区间编码的索引
关于区间编码索引,树T中的每一个结点被给予一个区间编码[begin,end],满足:一个结点的区间编码包括它的后嗣结点的区间编码.也就是说,树T中 的节点u是节点v的先人,当且仅当start(u)
第一个区间编码计划是Dietz编码,树T中的每一个结点被给予一个具有先序遍历序号和后序遍历序号的二元组.因为树T中的一个先人结点u在先序遍历(后序遍历)中必定涌现在它的后嗣结点v之前(以后),因而, 节点u和v是先人/后嗣关联,当且仅当PRe(u)
另一个区间编码索引的典范例子是XISS索引,它为每一个节点给予一个数字对,个中order为扩大的前序编码,size为节点的子孙的局限。对一棵文档树中的恣意节点X和Y,当且仅当order(x)
XISS索引经由过程将原始查询语句分解为子表达式。然后离别针对这些子表达式完成查询,末了对这些中心结果举行联络取得查询结果集。从而能较好地支撑含通配符的查询语句。不过,它是对每一个中心结果举行联络后获得终究查询结果。虽然如许一种要领确实能够处理一切的通配符题目,但是,这类中心结果的联络很有多是异常耗时的,特别是关于长途径的简朴表达式。
两种索引机制的比较
基于途径的索引主要基于节点兼并的战略,经由过程节点等价、途径等价等手艺,获得比原始文档小得多的索引构造,它的构造仍然是树型的,所以在处置惩罚查询时,基本上仍须遍历全部索引树才获得结果。基于途径的索引能够很好地支撑简朴途径表达式的查询,然则关于正则途径表达式,它结果不是很抱负。
基于节点的索引经由过程编码手艺索引每一个节点,节点之间的构造关联经由过程编码能够在常数时刻内肯定它能够很好地支撑正则途径表达式,然则关于长的途径表达式,尤其是在查询发生的中心结果许多的时刻,节点索引的衔接操纵价值奋发。
基于途径的索引和基于节点的索引各有优瑕玷,但能够优势互补。现在在现实运用中,基于节点的索引运用更加普遍,研讨得也比较成熟,因而,达梦公司有关XML索引构造研讨主要以基于节点的索引为主,并恰当参考基于途径的索引加以改进。
以上就是XML数据查询手艺已成为当今的研讨热门的内容,更多相干内容请关注ki4网(www.ki4.cn)!