XML索引

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
XML索引
概述

在传统的关系数据库中有很多成熟的索引技术,比 如B+树索引和hash索引。但是在对XML文档进行索 引时,不但要求索引能有效的加快查询,还需要注 意以下两点: 一、结构关系的获取:在关系数据库中,索引 主要是根据值定位数据记录,不太关注数据记录间 的逻辑关系。而在XML查询的基本特征就是根据模 式特征(路径表达式描述的结构关系)的输入提取 符合该模式的数据。
得到了每个节点以及属性的自然路径字符串
表示后,我们按字典序将它们用PT树做索引。 (即PT树中的叶子节点为自然路径的字符串 表示)。具体实例如下:
我们注意到PT树是不平衡的。于是在Fabric
索引中,我们对得到的PT树进行了平衡化处 理。这种平衡化的处理并不是对PT树本身的 纵向结构进行处理,而是通过附加一个水平 的层次实现的。同时为了方便在计算机上储 存。 Fabric索引将PT树分为若干个子树。每 个子树的大小刚好为一个物理块。(每个子 树将仍然保持关联)然后将每个子树的根节 点作为新的索引项用PT树进行索引。如下图
Trie-树
trie
树是一种用于快速检索的多叉树结构; trie 树把要查找的关键词看作一个字符序列。 并且从根到叶子的每条边表示一个字符。如 下图 a c
t at r car a t cat
Patricia Trie树
Patricia
Trie树(简称PT树)是Trie树的一种 变体,在Trie树中只有一个孩子节点的节点都 和双亲节点合并。如下图:
m叉B-树是一颗m叉搜索树,并且还满足以
下几个条件: 1、根节点至少有两个孩子 2、除了根节点以外,所有内部节点至少有 round(m/2)个孩子。 3、所有叶子节点都在同一层上。 下面是一个B-树的具体示例。
B-树的特点
B-树是一个平衡树。
在B-树中,所有的索引项都储存在叶子节点

对于上图,我们由树的前序遍历(从左到右)可以得到其前序 遍历编码为PSNv1IMv2Nv3IMv4INv5Lv6BLv7Nv8
有了前序遍历编码后,我们就可以定义XML文档的 结构化编码: 一个文档的结构化编码为D=(a1,p1) (a2,p2) … (an,pn), 其中ai为XML树中节点的编码,pi为根节点到ai节点 的路径,并且ai按前序遍历编码顺序排列。 例如上例的结构化编码为D=(P, ∝) , (S,P) ,(N,PS),(v1, PSN),(I,PS),(M,PSI),(v2, PSIM),(N,PSI),(v3, PSIN),(I,PSI),(M,PSII),(v4, PSIIM),(I,PS),(N,PSI),(v5, PSIN),(L,PS),(v6,PSL), (B,P),(L,BP) , (v7, PBL),(N,PB),(v8, PBN)
经过这样的处理后,好像在水平方向上也建
立了一个PT树,并且这个PT树的深度很小。 要访问树中的节点,就从最高层(即水平方 向PT树的根节点)开始依次进行查询。可以 看到整过过程是平衡的。
精确路径(refiห้องสมุดไป่ตู้ed paths)

在XML查询中有一类很常见的查询如下:找到所有 这样的invoice,在这个invoice中company X卖东西 给company Y。要回答这样的查询,我们需要找到 这样的invoice路径,它有一个值为X的seller孩子节 点和一个值为Y的buyer孩子节点。为了表示这样的 路径,我们指定“Z”作为其开始标示符。接着我们 定义字符串Z X Y为company X卖东西给company Y 的表示。并将其插入到Fabric索引中。这样我们实 现上面的查询就可以简化为找到有索引项Z X Y。

注意:在自然路径中,我们将节点的属性处
理为有标记的孩子节点。例如我们将<A B=“alpha”>…处理为<A><B>alpha</B>…但 为了区分属性和孩子节点,我们用不同的字 母来分别表示它们(即使他们有相同的前 缀),比如在上例中我们用C来表示节点 <count>用C’来表示属性count。

查询1
查询2
查询3
查询4
在实现查询2时,通常是将其分解为两个形如
一的查询,并分别求解,最后再对得到的结 果做连接操作。
在VIST索引中,我们用结构化的编码来代替
节点或路径作为索引项。并且对需要进行的 查询做同样的编码。然后定义了两种祖先/ 后裔关系:即D祖先/后裔关系(简称D关系) 以及S祖先/后裔关系(简称S关系)。其中 D关系为节点间在XML树中的祖先/后裔关 系,S关系为节点的结构化编码在后缀树中的 祖先/后裔关系。这样,就可以有效的支持 上述四种查询。具体的步骤如下:

Fabric索引的主要思想为尽量将XML文档的
结构信息编码为字符串。然后将其插入到PT 树中。然后利用PT树强大的字符串管理功能 来维护这些字符串。
VIST索引
在XML查询中,主要有四类常用的查询。比如查询 1:找到所有供应计算器的厂家。查询2:找到所有 这样的订单,在这个订单里供应商在波斯顿,而购 买者在纽约。查询3:找到所有这样的订单,在这 个订单中供应商和购买者之间至少有一个是在波斯 顿。查询4:找到所有这样的订单,在这个订单中 包括有因特尔的产品。 这四个常见查询所对应的查询图形如下所示:



其中*表示可以匹配任意一个符号标记, //表示可以匹 配任意一部分路径。 有了两方面的编码后,我们可以得到在D中有下划线的编码 序列刚好匹配查询Q2。 我们可以看到有了结构化编码后,我们可以在索引中进行整 个查询的匹配,而不需要将其分为几个小的部分,然后再对 各个部分得到的结构做连接操作(在通常情况下,连接操作 需要相当大的开销)。 需要注意的是,查询路径的编码和XML文档遵循相同的前序 遍历次序。比如在查询Q2和XML文档中都有Seller节点是 Buyer节点的左兄弟。
自然路径(raw paths)
我们定义,在XML文档中从根结点到叶子节点的路 径为每个叶子节点的自然路径。比如在上例中的 <invoice><buyer> <name>ABC Corp</name></buyer></invoice>就是一条 从根节点<invoice>到叶子节点ABC Corp的路径。 又比如XML片段 <A>alpha<B>beta<C>gamma</C></B></A>,包 含了三条自然路径<A>alpha, <A><B>beta, <A><B><C>gamma这样我们就可以找到文档中所 有这样的路径,然后我们按上面介绍的方法对路径 进行字符串编码。 下面列出了对文档的节点以及自然路径的编码。
更新
当我们插入新的节点到Fabric索引中,我们首先在 最底层根据字典序将其插入到应插入的地方。如果 其所在的子树的大小超过了物理块的大小。就将子 树分裂,并依次更新更高层,直到最高层。(其操 作类似于B树)。换句话说,现在最底层的PT树中 插入新的节点,再更新在水平方向上的PT树。 当我们删除索引中的节点时,我们首先找到要删除 节点位置,将其删除。如果删除节点后,所在的子 树为空,则类似于B树,更新水平方向上的PT树。
Fabric索引

Fabric索引中,我们首先将要索引的XML文档进行字 符串编码。下图是一个XML文档的实例
我们可以对其中的元素进行编码:我们选择I
来代表<invoice>,B来代表<buyer>,N来代表 <name>;(即节点标记的前缀来表示节点) 这样字符串“IBNABC Corp”能代表以下的 XML文档片段: <invoice> <buyer> <name>ABC Corp</name></buyer> </invoice>

我们就将得到的结构化编码作为索引项进行索引。 有了结构化编码后,就可以依据前缀关系很容易的 判断出两个节点是否为D关系。比如由(S,P),(v1, PSN)可以得到S是v1 的祖先(在D祖先/后裔关系 中)因为(S,P),(v1, PSN) PS是PSN的前缀。 基于同样的方法和思想,我们对要进行的查询进行 编码。下面列出了查询1-4对应的编码。
二、保序元素在XML文档中是有一定的次序限 制的,该次序称为XML文档的次序。各个元素在次 序中出现的顺序取决于对XML树的先序遍历。因此 要保证得到的结果元素集仍然有原XML文档中的次 序关系。即与这些元素在原XML文档中的先序遍历 有一一对应的关系,而且元素间的结构关系也必须 一致。 下面先介绍在索引中常用的树型结构,然后再详细 介绍有关XML文档的索引技术。
0 a at r car c 2 t cat
换个角度看,PT树的每条边将字符串的差异
表示出来(其中节点上的数字表示它的孩子节 点有多少位前缀相同)。因此它增长的很慢。 索引项的长度对它的大小基本上没有什么影 响。
Suffix树
Suffix树(后缀树)是以文本所有后缀为关键
词的 Patricia 树。 后缀树的引入主要是针对字符串的高效查找 ①子串查找 ②最长重复子串 ③最长公共子串 ④回文子串
中,而且查询和更新的复杂度依赖于树的高 度。 B-树的扇出一般都很高,所以B-树的高度 很少超过5。
B-树的典型算法




查找 插入 选择叶子结点 分裂结点(有多种算法) 调整树 必要时增加树的高度 删除 找到包含要删除记录的叶子结点 删除 压缩树 必要时减小树的高度 更新 先删除老的记录索引,在插入新的记录索引

R-树的特点
R-tree是B-Tree对多维对象(点和区域)的
扩展 R-tree是一棵平衡树 一个多维对象只能被分到一个子空间中去 若用动态插入算法构建R-tree,在树的结点 中会引起过多的空间重叠和死区(deadspace),使算法性能降低 R-树的典型算法跟B-树的相同。
R-树
在介绍R-树模型前,我们先来看看数学中处理矩形的方法: 1、将矩形转变成更高维区间上的点(一维空间上的两个数可 以看作二维空间上的点)。 2、用空间充填曲线(space filling curve)将k-d空间映射为 1-d空间。这种方法适用于分页环境。它用z变换将k-d对象 转变为线段 3、将原始空间划分为合适的子空间(重叠或分离的) ①划分为分离子空间 用处理多维点的空间划分方法,只是若一个矩形被分到 多个区域,可将该矩形分成几个部分,每一部分都加上 标签,表示他们同属于一个矩形。 ②划分为有重叠子空间 下面我们将看一个具体的例子。
基本树型结构介绍
在XML索引技术中,用到了很多关系数据库
中常用的树型索引技术。下面将逐一介绍。
B-树


我们首先定义m叉搜索树: 如果一颗m叉搜索树非空。则它要满足以下一个条件: 1、每个节点最大含有m个子女以及1之m-1个元素。 2、每个含有p个元素的节点有p+1个子女 3、含有p个元素的节点,设k1...Kp是这些元素的关 键值,这些值顺序排序。即k1<k2<...<kp;设C 0...Cp是节点的p+1个子女,则以co为根的子树的 关键值小于k1;以Cp为根的子树的关键值小于 kp;以 Ci为根的子树的关键值小于ki+1,大于ki,其中1≦i ≦p
XML索引技术
现有的XML索引技术可以大致分为两类:一
是在结构上建立索引,二是在节点记录上建 立索引。 下面我们将按照上述的分类对现有的索引技 术进行介绍。
节点记录类索引
结构索引的主要想法有两类:一是将所有的
路径表达式看成字符串并且将它们按照字典 排序。然后将其作为索引项插入到相应的树 型索引结构中。这样树的每个叶子节点都含 有一个表示一个路径表达式的字符串,以及 一个与该路径表达式结果相对应的id列表。 二是通过某种遍历方法得到节点的序号,然 后直接对其做索引。 下面我们将介绍几种具体的实现方法。
结构化编码
我们用节点和属性标记的首字母作为节点和
属性的编码,比如在下例中:P代表 Purchase …然后构造一个hash函数H()将属 性值映射到一个整数。比如在下例中:v1=H (“dell”) v2=H(“ibm”)…这样我们可以用v1,v2来 分别代表“dell”,“ibm”。 下面是一个XML文档实例:
相关文档
最新文档