用于提高数据库系统中的高速缓存性能的压缩方案的制作方法

文档序号:6351294阅读:266来源:国知局
专利名称:用于提高数据库系统中的高速缓存性能的压缩方案的制作方法
技术领域
本发明一般涉及数据库系统,具体涉及用于提高主存储器数据库系统中的索引高速缓存性能的压缩方案。
背景技术
随着服务器DRAM模块继续走低,很多数据库表格和索引现可装入现代计算机系统的主存储器。预计在十年左右内,数据库将普遍具有万亿字节的主存储器。
采用这种大容量存储器,磁盘存取的传统瓶颈几乎消失,尤其是对于搜索事物处理来说,更是如此。然而,存储器存取成为一种新的瓶颈。最近在商用DBMS方面的研究表明,当整个数据库都驻留在存储器内时,一半执行时间将花在存储器存取上。
由于为换取容量而牺牲了DRAM芯片的速度,因而在CPU速度和DRAM速度之间的差距在过去十年中已显著拉大。在当今计算机系统中,每次存储器存取都要用去几十个处理器周期。为了克服这种差距,现代处理器采用高达数兆字节的SRAM作为高速缓存,这只需一个或两个处理器周期就可存取。
意识到CPU速度和DRAM速度之间差距的不断拉大,已强调了高速缓存性能在主存储器索引设计中的重要性。现已表明,高速缓存感知(cache-conscious)搜索树(“CSS-tree”)在只读环境中执行查找的速度比对分搜索树和T-tree都快。B+-tree及其变型已表明具有比较好的高速缓存性能。
例如,CSB+-tree(“高速缓存敏感(cache sensitive)B+-tree”)把子女节点连续存储在存储器内,以消除节点中的除第一子女指针以外的大多数子女指针。第i个子女节点的位置从第一子女节点的位置来计算。通过为节点内的关键字提供更多空间,这种指针消除方案可有效地使B+-tree的扇出(fanout)增加一倍。考虑到节点大小约为高速缓存块的大小,使扇出增加一倍将减小B+-tree的高度,而这又会在树遍历过程中使高速缓存未命中数减少。
注意,这种指针消除技术在扇出典型地约为几百的基于盘的索引方面不会提供很多好处,并且使扇出增加一倍也不会导致树高度立即减小。
然而,指针消除技术不能直接应用于诸如R-tree那样的多维索引结构,而多维索引结构具有众多应用领域,例如,时空数据库,数据仓库,以及目录服务器。
存储在R-tree中的数据对象由在多维索引空间中的所谓的最小边界矩形(“MBR”)近似,其中,各MBR均是用于封闭相应数据对象的最小超矩形(即二维或更高维矩形或盒)。本领域技术人员将意识到,MBR可扩展成包括盒或棱锥在内的多维形状。
典型的是,MBR比指针大得多。因此,单单指针消除不能加宽索引树来显著减小树高度。例如,当16字节MBR用于二维关键字时,仅消除4字节指针最多能为关键字提供增加25%的空间,这种增加不足以大到能为提高高速缓存性能而使树高度发生任何大的差异。
因此,需要一种方案,用于在存取多维索引时提高高速缓存性能,以便存取主存储器数据库。

发明内容
意识到MBR关键字占用多维索引R-tree内的大多数索引数据,本发明可使MBR关键字的压缩成本低廉,以提高索引高速缓存性能。本发明的优选实施例被称为“CR-tree”(高速缓存感知R-tree),在该“CR-tree”中,子女节点被组合成父母节点,以使各节点仅占用其父母节点的数据空间的一小部分。在CR-tree中,MBR相对于其父母MBR来表示,以使所得的相对MBR的坐标具有带许多前导零的较少有效位数。为了进一步减少每个MBR的位数,CR-tree还通过量化来切掉尾随无效位。
分析结果和实验结果一致表明,该压缩技术可把MBR大小减少到未压缩MBR的四分之一以下,从而把扇出增加150%以上。所提出的这种技术存在一个潜在问题是,由量化引起的信息损耗可能造成假命中,而假命中必须通过后续提纯步骤予以筛出。然而,需要该提纯步骤本身不是问题,因为这在大多数多维索引中都是需要的,并且通过合适选择量化层数,可将假命中数保持小到可忽略不计,这样,通过显著避免高速缓存未命中,可补偿假命中筛出的成本。
本发明在CR-tree的设计方面还包括多个替代实施例,无论是使用在CSB+-tree中引入的指针消除技术,还是把所提出的压缩技术应用于叶节点,这些替代实施例都包括量化层数的选择以及节点大小的选择。实验结果表明,所有得到的CR-tree变型在搜索性能和空间要求方面都大大优于R-tree。仅使用所提出的这种技术的基本CR-tree执行搜索操作的速度比R-tree快,同时执行类似于R-tree的更新操作,并使用较少存储空间。与基本CR-tree相比,CR-tree的大多数变型以少量的算法开销使用较少的存储空间。


图1A、图1B和图1C是本发明的QRMBR技术的说明图。
图2A、图2B和图2C是CR-tree的数据结构的说明图。
图3A~图3G是有关CR-tree的处理的流程图。
图4A~图4C是CR-tree三个变型的数据结构变化的说明图。
图5A和图5B是示出R-tree和CR-tree中的节点存取的图。
图6A和图6B是示出R-tree和CR-tree中的高速缓存未命中的图。
图7A和图7B是示出在二维R-tree和CR-tree中的最佳节点大小随查询选择性而增加的图。
图8A和图8B是示出由QRMBR大小和维数引起的假命中率的图。
图9A和图9B是示出大量装有均匀数据集的二维树的搜索性能的图。
图10A和图10B是示出大量装有非均匀数据集的二维树的搜索性能的图。
图11A和图11B是示出具有变化基数的二维R-tree和CR-tree的搜索时间的图。
图12A和图12B是示出大量装有均匀数据集的树的更新性能的图。
图13A和图13B是示出在插入或删除之后的搜索性能的图。
图14A、图14B和图14C是示出由量化引起的假命中率的图。
图15A和图15B是示出MBR大小随不同量化层数而增加的图。
图16A、图16B和图16C是示出采用不同量化层数的搜索时间的图。
图17A和图17B是示出存取索引数据量的图。
图18A和图18B是示出L2高速缓存未命中数的图。
图19A和图19B是示出关键字比较数的图。
图20A和图20B是示出4种类型DRAM的存取速度的图。
图21A和图21B是示出二维CR-tree的分析结果和实验结果的比较的图。
本发明的最佳实施例本发明的基础是,通过压缩MBR来使R-tree对高速缓存感知。R-tree是一种专为给数据库中的多维数据对象加索引而设计的高度平衡树结构。它存储具有二维或更高维数据对象的最小边界矩形(“MBR”),作为叶页面中的关键字。本发明还可适用于R-tree的一种变型,被称为R*-tree,它使用更好的试探法来提高搜索性能,该试探法用于重新分配条目,并在插入过程中动态重组该树。本领域技术人员将意识到,本发明可容易地适用于R-tree的其他变型,例如,R+-tree,Hilbert R-tree,或者X-tree。
图1示出了本发明中使用的压缩方案。图1A示出了R0~R3的绝对坐标。图1B示出了相对于R0的左下角来表示的R1~R3的坐标。这些相对坐标的有效位数比绝对坐标少。图1C示出了通过切断尾随无效位而量化为16层或四位的R1~R3的坐标。所得MBR被称为量化MBR(“QRMBR”)。注意,QRMBR可略大于原始MBR。
本发明的优选实施例是一种被称为CR-tree(“高速缓存感知R-tree”)的索引树,它是R-tree的一个变型,其使用QRMBR作为索引关键字。对于CR-tree内的所有节点来说,量化层数可以相同。
图2A示出了CR-tree节点的数据结构。各节点均可包含最多M个条目。此外,该节点保持有标志201,其表示节点是叶节点还是非叶节点(内部节点);所存储条目的数量202;参考MBR 203,其紧紧封闭它全部子女MBR;以及多个条目,例如204。参考MBR用于计算存储在节点内的QRMBR。
图2B示出了以(QRMBR 211,ptr 212)形式存储条目的非叶节点(内部节点),其中,QRMBR 211是子女节点MBR的量化相对表示,ptr 212是子女节点的地址。
图2C示出了以(QRMBR 221,ptr 222)形式存储条目的叶节点,其中,QRMBR 221是对象MBR的量化相对表示,ptr 222是指一个数据对象。典型的是,x坐标和y坐标均量化成256层或一个字节。
本发明的一个目的是,尤其是使用多维索引来缩短主存储器数据库中的索引搜索时间。在基于磁盘的索引中,当节点大小适中时,磁盘存取成本几乎与节点大小无关,而存储器存取成本几乎与节点大小成正比。尽管基于磁盘的索引被设计成把磁盘存取次数降至最少,然而主存储器索引需要设计成把存取索引数据量或c·Nnode access降至最少,其中,c表示高速缓存块中的节点大小,Nnode access表示存取节点数。
在主存储器索引中,搜索时间主要由关键字比较时间和存储器存取时间组成,而存储器存取时间由高速缓存未命中产生。如果发生高速缓存未命中,则CPU必须等待,直到对遗漏数据进行高速缓存。高速缓存未命中会由于三种原因而发生,即数据遗漏,指令遗漏,以及TLB(表后备缓冲区)条目遗漏,需要TLB条目来把虚存地址映射为物理地址。因此,该目的被表示为使下列结果最小Tindexsearch≅Tkeycompare+Tdatacache+TTLBcache]]>式中,Tkey compare是对高速缓存后的关键字进行比较所花的时间,Tdata cache是对数据进行高速缓存所花的时间,TTLB cache是对TLB条目进行高速缓存所花的时间。为了说明起见,将遗漏指令的高速缓存时间忽略不计,因为指令遗漏数主要取决于所用的编译程序,并且高速缓存时间难以控制。
假定c是高速缓存块中的节点大小,并假定Nnode access是通过处理一个查询而存取的节点数。假定Ckey compare是每个高速缓存块的关键字比较成本,并且Ccache miss是高速缓存块的更换成本。假定CTLB miss是一次TLB遗漏的处理成本。当节点大小小于存储页面大小时,每次存取节点均最多产生一次TLB遗漏。为了说明起见,假定节点已随机分配,并且最初不对节点和TLB条目进行高速缓存。于是得出,Tindex search=c×Ckey compare×Nnode access+c×Ccache miss×Nnode access+CTLB miss×Nnode access=c×Nnode access×(Ckey compare+Ccache miss+CTLB miss/c)由于Ccache miss和CTLB miss对于给定平台来说是常数,因而可控制三个参数c,Ckey compare以及Nnode access。其中,预计不显著减小Ckey compare,因为关键字比较一般非常简单。此外,CTLB miss和Ccache miss典型地具有相似值。因此,索引搜索时间主要取决于c·Nnode access。
可以看出,通过压缩索引条目,可最大限度地减少存取的索引数据量。c·Nnode access可采用三种方法降至最小,即改变节点大小,以使c·Nnode access最小;把更多个条目组合成一个固定大小的节点;把索引条目有效地聚类成节点。第二种方法经常被称为压缩,而第三种方法经常被称为聚类。
在一维情况下,最佳节点大小等于高速缓存块的大小。在比如B+-tree那样的一维树中,由于即便对于范围查询,对每个高度也是存取正好一个内部节点,因而被访内部节点数随节点大小而以对数形式减少。另一方面,被访叶节点数随节点大小而以线性形式减少,并且c随节点大小而以线性形式增加。因此,c·Nnode access随节点大小而增加,这样当c是1时,c·Nnode access最小。
在多维索引中,即便对于精确匹配查询,也可存取同一高度的一个以上内部节点,并且同一高度的存取节点数随节点大小增加而减少。由于这种减少与树高度的对数标度减少相结合,因而存在以下可能,即节点存取的组合减少速度超过c的线性增加速度。分析表明,最佳节点大小取决于多种因素,例如,查询选择性和基数(索引结构中的条目数)。
压缩索引条目相当于增加节点大小,而不增加c。也就是说,这可减少Nnode access,同时保持c固定。因此,这是非常合乎需要的。在基于磁盘的索引中总是频繁地使用压缩,因为这可减少树高度,但专用工作很少,尤其是在多维索引中。以下分析表明,为何压缩在基于磁盘的索引中不重要,而在主存储器索引中却重要。
假设树A可平均把f个条目组合在一个节点内,并且树B使用良好压缩方案把2f个条目组合在一个节点内。于是,它们的期望高度分别是logfN和log2fN。因此,B的高度是A的高度的1/log2f+1(=logfN/log2fN)分之一。在基于磁盘的索引中,节点的典型大小从4KB到64KB不等。假定节点大小是8KB并且节点为70%已满,则对于B+-tree索引,f是716( 8192×0.7/8),对于二维R-tree,f约为286( 8192×0.7/20)。因此,1/log2f典型地约为0.1。另一方面,节点大小在主存储器索引中较小。在节点占用两个高速缓存块或128字节的情况下,对于B+-tree,f约为11,对于二维R-Tree,f约为4。因此,对于B+-tree,1/log2f是0.29,对于R-tree,1/log2f是0.5。总之,由于节点大小较小,因而节点压缩可大大减少主存储器索引的高度。
在基于磁盘的索引结构中,聚类一直得到广泛研究。在聚类方面,B+-tree在一维空间内最佳,但对于多维情况,最佳聚类方案还未知。不过,许多试探方案已在各种多维索引结构中得到研究。本发明可与大多数这些聚类方案一起使用。
MBR压缩对于MBR压缩方案,有两种期望特征。一种特征是无解压缩的重叠检查。两个MBR重叠与否,可从相应的压缩MBR中直接来判定,而不用将其解压缩。基本R-tree操作是检查节点内的各MBR是否与一个给定查询矩形重叠。因此,当把压缩MBR存储在节点内时,该特征可通过压缩一次查询矩形就能执行R-tree操作,而不用将节点内的所有压缩MBR解压缩。
另一特征是简化性。压缩和解压缩应计算简单,并只能使用已高速缓存后的数据来进行。常规无损压缩算法,正如在GNU gzip程序中使用的那种算法,在计算和存储器存取这两方面都很昂贵,因为这些算法大多含有基于熵的的映射表,并查阅该表用于压缩和解压缩。尽管这些算法可用于基于磁盘的索引,然而它们却不适用于主存储器索引。
RMBR技术一种压缩方法是相对于节点内的一个参考MBR来表示关键字。如果MBR的坐标是相对于其父母MBR的左下角来表示,则所得的相对坐标具有许多前导零。在MBR的相对表示(“RMBR”)中,切掉这些前导零可有效减少MBR大小。
假定P和C是MBR,它由其左下坐标和右上坐标(xl,yl,xh,yh)来表示,并假定P封闭C。于是,C针对的相对表示具有相对于P的左下角的坐标。
RMBRP(C)=(C.xl-P.xl,C.yl-P.yl,C.xh-P.xl,C.yh-P.yl)然而,以下简单分析表明,RMBR技术可仅节省约每MBR 32位。为了简化起见,假设MBR的坐标均匀分布在其域中,并且同一高度的R-tree节点大致具有同一大小的方形MBR。在不失通用性的情况下,假定x坐标域具有单位长度,并由间隔相等的232个不同值组成。
假定f是叶节点的平均扇出,并假定N是数据对象的总数。于是,大致有N/f个叶节点,其MBR的面积为f/N,并且沿各轴的边长为 由于沿各轴的单位区间内有232个不同值,因而在长度为 的区间内有 个不同值。因此,对于各x坐标值,均可节省32-log2(232f/N)]]>位或log2N/f]]>位。当N是一百万并且f是11时,可节省约8.2位。通过乘以4,可节省约每MBR 32位。注意,只要节省位数小于原始位数,节省位数就不取决于原始位数。
可容易扩展该分析结果,以使节省位数通过维数进一步参数化。扩展结果是log2N/fd]]>或者是(log2N-log2f)/d(1)公式(1)在N方面以对数形式增加,在f方面以对数形式减少,但随着d以线性方式减少。因此,节省位数主要取决于维数。在一维空间中,该相对表示技术可为每个标量节省几乎16位,但是随着维数增加而变得无用。
QRMBR技术除了RMBR技术之外,可进行量化,作为进一步压缩的附加步骤。在量化RBMR(“QRMBR”)技术中,量化步骤从RMBR中切掉尾随无效位,而RMBR技术从MBR中切掉前导非鉴别位。以下表明,对RMBR进行量化不会影响索引搜索的正确性,并且通过显著避免高速缓存未命中,使得由量化引起的少量开销被认为是合理的。
假定I是参考MBR,并假定l是期望的量化层数。于是,MBR,C的相应量化相对表示被定义为QRMBRI,l(C)=(φI.xl,I.xh,l(C.xl),φI.yl,I.yh,l(C.yl),ΦI.xl,I.xh,l(C.xh),ΦI.yl,I.yh,l(C.yh))式中,φa,b,lR→{0,...,l-1}和Φa,b,lR→{1,...,l}是 以下引理表明,QRMBR满足两个期望特征中的第一个特征。因此,QRMBR技术的计算开销是把查询矩形压缩成每个被访节点的QRMBR所花的成本。在该实施中,把MBR压缩成QRMBR最多用去约60条指令。由于流水线技术,这相当于在一个400MHz处理器上花费不到120ns。此外,这也不会招致存储器存取,只要对查询MBR和立即存取时节点的MBR进行高速缓存就行。
引理1假定A和B是MBR。对于任何MBR I和整数1来说都成立的是,如果QRMBRI,l(A)和QRMBRI,l(B)不重叠,则A和B也不重叠。
证明通过对换置位命题,即如果A和B重叠,则QRMBRI,l(A)和QRMBRI,l(B)重叠这一换置位命题进行证明来证明。根据定义,当且仅当两个矩形共享至少一个点时,这两个矩形才重叠。因此,A和B共享至少一个点。假定(x,y)表示该点。于是,以下公式成立。
A.xl≤x≤A.xh,A.yl≤y≤A.yhB.xl≤x≤B.xh,B.yl≤y≤B.yh为了简化起见,下标a、b和l从量化函数φ和Φ中省略。由于φ和Φ是单调非下降函数,并且对于任何r∈R都有φ(r)≤Φ(r),因而φ(A.xl)≤φ(x)≤Φ(x)≤Φ(A.xh),φ(A.yl)≤φ(y)≤Φ(y)≤Φ(A.yh)φ(B.xl)≤φ(x)≤Φ(x)≤Φ(B.xh),φ(B.yl)≤φ(y)≤Φ(y)≤Φ(B.yh)因此,QRMBRI,l(A)和QRMBRI,l(B)共享至少点(φ(x),φ(y))。因此,它们重叠,证明完毕。
由于一般无法从MBR的QRMBR恢复MBR的原始坐标,因而存在对两个MBR之间的重叠关系判定不正确的可能。然而,引理1保证没有把两个实际重叠的MBR说成不重叠的可能。因此,QRMBR技术不会遗漏一个满足查询的数据对象。
然而,还有一种可能是两个实际不重叠的MBR会重叠。也就是说,索引搜索结果会包含假命中,该假命中必须通过后续提纯步骤来筛出。该提纯步骤对于大多数多维索引结构是需要的,因为经常存在以下情况,即MBR不是数据对象的确切关键字。因此,需要提纯步骤本身并不是一项开销,而假命中数会是一项开销。通过正确选择量化层数,可使假命中数小到忽略不计,例如小于百分之一。
本发明的CR-tree图3A至图3G示出了与本发明的CR-tree相关的过程。在CR-tree和那些常规R-tree变型的算法之间的两大区别是CR-tree把QRMBR存储在节点内,并随着其MBR放大或缩小而保持这些QRMBR。
图3A示出了搜索过程的流程图,该搜索过程类似于在其他R-tree变型中使用的搜索过程,只不过CR-tree需要把查询矩形与节点内的QRMBR进行比较。CR-tree使用各节点的MBR作为参考MBR,把查询矩形变换为相应QRMBR,而不是从QRMBR恢复MBR。然后,它比较两个QRMBR,以判定其是否重叠。
搜索过程已知CR-tree和查询矩形Q,查找其QRMBR与Q重叠的所有索引记录。
1.把根节点推入最初空的栈S(步骤301)。
2.如果S处于空状态(步骤302),则返回结果集(步骤303)并停止(步骤304)。
3.如果S不是处于空状态(步骤302),则把一个节点N从S中弹出(步骤305),并把R设定为QRMBRN.MBR,l(Q)(步骤306)。
4.如果N不是叶节点(步骤307),则检查各条目E,以判定E.QRMBR是否与R重叠。如果重叠,则把E.ptr推入S(步骤308)。
5.如果N是叶节点(步骤307),则检查所有条目E,以判定E.QRMBR是否与R重叠。如果重叠,则把E.ptr添加给结果集(步骤309)。
6.从步骤2开始重复。
图3B示出了Insert过程的流程图。Insert过程通过调用ChooseLeaf和Install过程,把其MBR是C的新数据对象O插入CR-tree。如果需要,也可调用SplitNode和AdjustTree过程。Install过程通过把N.MBR放大成使其封闭C,并且通过生成条目(QRMBRN.MBR,l(C),p)并将其附加给N,把一对MBR C和数据对象指针p安装在节点N内。如果N.MBR已放大,则通过存取N内所有QRMBR的实际MBR来重新计算N内的所有QRMBR,并调用通过N的AdjustTree过程。
为了插入新数据对象(步骤315),CR-tree通过选择子女节点,把自身从根节点下降,该子女节点需要最少放大来封闭对象MBR的新关键字。如果节点的MBR封闭新关键字(步骤316),则为新条目计算相对关键字(步骤317)。如果节点的MBR未封闭新关键字(步骤316),则节点的MBR必须放大,以封闭新关键字(步骤318)。
当访问一个内部节点以选择其一个子女节点时,使用节点MBR作为参考MBR,把对象MBR首先变换为QRMBR。然后,在一对QRMBR之间计算放大。为所有条目计算相对关键字(步骤319)。当达到页节点时,首先调整节点MBR,以使其封闭对象MBR。然后,在该节点内创建数据对象的索引条目。如果节点MBR已作调整,则重新计算节点内的QRMBR,因为其参考MBR已改变。
如果节点溢出(步骤312),则该节点被分割(步骤313),并且分割沿树向上传播。
图3C示出了ChoosLeaf过程的流程图,该过程选择一叶节点,在该叶节点内将放有一新MBR,使CR-tree从根节点下降。从根节点开始,如果选择节点不是叶节点(步骤332),则相对于节点的MBR形成插入关键字(步骤335),并选择一子女节点,该子女节点需要最小放大来封闭相对插入关键字(步骤336)。重复该处理,直到达到叶节点(步骤333)。
图3D示出了SplitNode过程的流程图,该过程根据R-tree所用的线性分割算法,把节点一分为二。节点内的QRMBR需要根据其MBR来重新计算。可使用R-tree及其变型所用的其他分割算法例如二次分割算法来进行分割。
最远条目对被选为种籽(步骤341)。形成两个节点,并且把每个种籽指配给一节点(步骤342)。挑选任一剩余条目(步骤344),并把该条目指配给一节点,该节点需要其MBR的最小放大以包括所选条目(步骤347)。如果一个节点具有(M-m)个条目(步骤345),其中,M是一个节点中的最大条目数,而m是一个节点中的预定义最小条目数,则应把所有剩余条目指配给另一节点(步骤346)。该步骤使各节点均具有至少m个条目。如果指配所有条目(步骤343),则可获得各节点的MBR,并可计算各节点内的相对关键字(步骤348)。
如果在分割中的节点是根节点,则形成新根节点,并且两个分割节点被添加给该根节点,作为其子女节点(步骤349)。重新计算该根节点的MBR和相对关键字(步骤351)。如果在分割中的节点不是根节点,并且如果父母节点已满(步骤352),则父母节点被分割(步骤353)。如果父母节点未满(步骤352),并且如果父母节点的MBR封闭新关键字(步骤355),则仅为两个新条目重新计算相对关键字(步骤376)。如果父母节点的MBR未封闭新关键字(步骤355),则父母节点的MBR被放大以便封闭新关键字(步骤357),并且为所有条目重新计算节点内的相对关键字(步骤358),并调整该树(步骤359)。
图3E示出了AdjustTree过程,该过程从叶节点L上升直至根节点,限据需要调整节点的MBR并传播节点分割。当一个节点MBR已作调整时,重新计算节点中的QRMBR。首先,检查放大节点是否是根节点(步骤371)。如果放大节点不是根节点,并且如果父母节点的MBR封闭该节点的MBR(步骤373),则更新父母节点的条目,并重新计算相对关键字(步骤374)。如果父母节点的MBR未封闭该节点的MBR(步骤373),则放大父母节点的MBR以封闭放大节点的MBR(步骤375)。更新父母节点的条目,并重新计算父母节点的所有相对关键字(步骤377),并且把父母节点设定成放大节点(步骤378)。
图3F示出了Delete过程的流程图,该过程从CR-tree中消除索引记录E。相对于节点的MBR来变换删除关键字(步骤386)。如果节点是叶节点(步骤387),则把节点内的各条目与删除对象进行比较(步骤389)。如果任何条目与删除对象匹配(步骤390),则从叶节点中删除该条目(步骤391)。如果删除条目的关键字接触叶节点的MBR(步骤393),则重新计算各条目的相对关键字(步骤394),并压缩该树(步骤395)。
图3G示出了CondenseTree过程的流程图。如果叶节点L中已删除一条目并因而使该叶节点几乎不留有条目,则CondenseTree过程消除该节点,并把所有其条目重新定位。根据需要,使节点消除向上传播。调整通往根节点的路径上的节点的所有MBR,如有可能,缩小这些MBR。当一节点的MBR已作调整时,重新计算该节点中的QRMBR。
首先,查找父母节点中的收缩节点条目(步骤401)。如果该条目的关键字未接触父母节点的MBR(步骤402),则使父母节点中的收缩节点条目更新(步骤409)和停止(步骤410)。如果该条目的关键字接触父母节点的MBR(步骤402),则把条目的关键字和收缩节点的MBR进行比较(步骤403)。如果父母节点不会收缩(步骤404),则使父母节点中的收缩节点条目更新(步骤405)。但是,如果父母节点会收缩(步骤404),则使父母节点中的收缩节点条目更新(步骤405)。重新计算父母节点的MBR(步骤406),并且还重新计算父母节点中的各条目的相对关键字(步骤407)。把父母节点设定成收缩节点(步骤408)。
本领域技术人员将意识到,也可采用在R-tree和R*-tree中所用的任何删除算法,并稍作修改。
大量装入大量装入CR-tree大量装入其他R-tree变型没有不同。只要正确保持QRMBR,就可直接使用现有的自底向上装入算法。
CR-tree变型图4A、图4B和图4C示出了本发明的CR-tree的三个变型,即PECR-tree,SE CR-tree,以及FF CR-tree。
图4A示出了第一变型,被称为PE(“指针消除”)CR-tree,类似于CSB+-tree,它从内部节点中消除指向子女节点的指针,除了第一条目的指针之外。各节点均包括字段421,用于表示节点是叶节点还是非叶(内部)节点;字段422,用于表示节点中的条目数;字段423,用于存储参考MBR;字段424,用于存储指向子女节点的指针;以及字段,例如425,用于存储QRMBR。
PE CR-tree通过消除大部分指针来显著加宽CR-tree,因为eR-tree的关键字大小小于例如R-tree。如果QRMBR大小是4字节,则当指针是4字节时,该扩展使内部节点的扇出增加一倍。
注意,指向存储在叶节点内的数据对象的指针很少会被消除。当内部节点和叶节点的平均扇出是10时,内部节点数约为叶节点数的九分之一。因此,扇出总增加仅约10%。
另一方面,由于指针消除技术通过将子女节点与同一父母节点连续存储来起作用,因而节点分割会很昂贵。采用分割创建的新节点必须与其兄弟一起连续存储,这经常需要分配新空间,并把兄弟移入该空间。
图4B示出了第二变型,被称为SE(“空间有效”)CR-tree,它从基本CR-tree的节点中消除参考MBR。它利用以下事实,即各节点的参考MBR可从其父母节点中的匹配条目来获得。
该图示出了除根节点之外的节点的结构。它包括字段431,用于表示节点是叶节点还是非叶(内部)节点;字段432,用于表示节点中的条目数;字段433,用于存储指向子女节点的指针;以及字段,例如434,用于存储QRMBR。注意,除根节点之外,在各节点中均不存在参考MBR。
当MBR大小是16字节并且QRMBR大小是4字节时,SE CR-tree可使内部节点的扇出增加4,并可使叶节点的扇出增加2。当节点大小与一个或两个高速缓存块一样小时,这种扇出增加会大于在PE CR-tree中获得的增加。
图4C示出了基本CR-tree的第三扩展,被称为FF(“无假命中”)CR-tree,它与上述两种扩展相比会减少叶节点的扇出,而上述两种扩展会增加叶节点的扇出。由于QRMBR技术是一种有损压缩方案,因而搜索结果会成为给定查询的实际应答的超集。只有当QRMBR技术仅应用于内部节点并把原始非相对MBR存储在叶节点内时,才可避免这一点。
该图示出了一种叶节点的结构,在该结构中,对象的MBR 441采用原始非相对格式与指向对象442的指针一起存储。当后续提纯步骤极其昂贵时,FF CR-tree很有用。例如,当管理区域的复杂边界多边形由其MBR加索引时,用于把给定查询形状与通过搜索索引所获得的数据对象的实际形状进行比较的提纯步骤会很昂贵。
表1示出了根据本发明的索引结构的各种实施例的空间要求,其中,N是叶节点条目数,S是以字节为单位的节点大小。假定MBR大小是16字节,则QRMBR大小是4字节,并且指针大小是4字节。假定节点为70%已满,则当N是1,000,000并且S是128时,可计算典型索引大小。注意,PE R-tree是由于使用指针消除技术而成为R-tree的扩展。通过把叶空间除以内部节点的平均扇出减去1,可计算内部节点空间。该分析表明,PE CR-tree在空间要求方面与CR-tree并无不同,并且PE R-tree与R-tree并无不同。
表1

分析结果在不失通用性的情况下,假定有单位超方形的数据范围。为了简化起见,假定数据对象均匀分布在该范围内,并且查询MBR是超方形。还假定同一高度的R-tree节点大体具有象其他分析工作那样的同一大小的方形MBR。Mathematica 3.0用于进行为目视比较分析结果所需的数值计算。
假定h表示节点高度或层数,并假定叶节点高度为1。假定Mh表示高度为h的节点数。从以上假定得出,

假定ah表示高度为h的节点所覆盖的平均面积。于是,ah是1/Mh。使用Minkowski求和技术,高度为h的节点与给定查询矩形重叠的概率是(sd+ahd)d,]]>其中,s表示查询矩形大小。于是,与查询矩形重叠的高度为h的节点数是Mh(sd+ahd)d]]>或者是

通过从叶到根对该公式求和,在R-tree中存取的节点总数是 另一方面,CR-tree把QRMBR进行比较,以便在R-tree把MBR进行比较的同时,判定是否访问节点。由于QRMBR比其原始MBR大,并且大出平均为一个量化单元(cell)的长度,因而节点存取次数在CR-tree中增加一位。
假定l表示量化层数。于是,各节点均具有ld个量化单元,并且各单元的边长是 其中,h表示节点高度。由于访问子女节点与否是通过把查询矩形的QRMBR与该子女节点的存储的QRMBR进行比较来判定,因而子女节点的访问概率为(sd+ahd/l+ah-1d+ahd/l)d.]]>通过乘以Mh并从叶到根求和,在CR-tree中存取的节点总数为 图5A和图5B针对基数为一百万和查询选择性为0.01%示出了公式(2)和(3)。假定指针大小是4字节,并且各节点均为70%已满。还假定MBR大小在二维(“2D”)情况下为16字节,并且随着维数增加而以线性方式增加。假定QRMBR大小为MBR大小的四分之一。
分析结果表明,存取节点数随节点大小增加而减少。减少速度最初较大,但随节点大小增加而减小。对于所有节点大小和所有三维来说,CR-tree超过R-tree两倍以上。
高速缓存未命中数通过把公式(2)和(3)乘以一次节点存取发生的高速缓存未命中数,可容易计算高速缓存未命中数。为了获得结果,将公式(2)和(3)乘以S/64,其中,S是以字节为单位的节点大小。
图6A和图6B示出了与图4A和图4B相同构成的所计算的高速缓存未命中数。分析结果表明,随着节点大小增加,高速缓存未命中数快速接近最小值,然后缓慢增加。在高速缓存未命中方面,CR-tree大大胜过R-tree达4.3倍。
图6A给出了锯齿形图形,该图形表明,高速缓存未命中数在一定节点大小时突减,而一般随着节点大小而增加。当树高度较小时,会发生这种冲击。例如,当节点大小是448字节或512字节时,4D R-tree的高度为7,但是当节点大小为576字节时,其高度为6。也就是说,当由于高度减少所引起的增益超过由于节点大小增加所引起的开销时,会发生这种冲击。
尽管在高速缓存未命中数方面,最佳一维节点大小被显示为上述高速缓存块大小,然而图6A和图6B表明,节点大小的这种选择在上述多维情况下不是最佳。
图7A和图7B对在查询选择性从0.001%到1%范围内变化的情况下所计算的高速缓存未命中数作了比较。可以看出,在R-tree和CR-tree中,最佳节点大小随着查询选择性增加而增加。
图7A表明,随着查询选择性增加,最佳节点大小按照128B(字节)、192B、320B、640B和960B的次序增加。图7B表明,随着查询选择性增加,最佳节点大小按照64B、128B、128B、256B和320B的次序增加。随着基数和维数增加,最佳节点大小以相同方式增加。
由量化引起的假命中率叶节点的各量化单元的面积为f/ldN,沿各轴的边长为 并且查询MBR的QRMBR和对象MBR重叠的概率为(sd+ad+2f/ldNd)d.]]>因此,假命中发生概率为(sd+ad+2f/ldNd)d-(sd+ad)d.]]>由量化引起的假命中率与实际应答之比除以(sd+ad)d]]>为(1+2f/ldNd/(sd+ad))d-1.---(3)]]>图8A和图8B示出了当基数为一百万并且查询选择性为0.01%时的公式(4)。在此,假定指针大小是4字节,并且各节点均为70%已满。图8A针对三种不同的QRMBR大小,即2字节、4字节和8字节,示出了2D CR-tree中的假命中率,图8B针对三种不同维数,即二维(“2D”)、三维和四维,示出了假命中率。假命中率随着节点大小和维数而增加。在该构成中,采用4字节的QRMBR会发生约一次假命中,但是如图6A和图6B所示,这可避免几十次或几百次高速缓存未命中。
实验结果为了证实本发明的CR-tree及其变型的优点,在一种运行Solaris2.7的SUN UltraSPARC平台(400MHz CPU,带有8MB L2高速缓存)上进行了一系列实验。
采用了六种索引结构,即原始R-tree,PE R-tree,CR-tree,PECR-tree,SE CR-tree,以及FF CR-tree。还采用了大量装入算法。在所采用的索引结构内,节点大小从64字节到1024字节不等。使用了16字节MBR,并且QRMBR大小从2字节到8字节不等。除非另有规定,QRMBR的缺省大小是4字节,并且节点为70%已满。
生成了两个合成数据集,这两个合成数据集由位于单位方形内的一百万个小矩形组成。一个数据集均匀分布在单位方形内,而另一数据集具有围绕中心点(0.5,0.5)的高斯(Gaussian)分布,标准偏差为0.25。矩形的平均边长被设定为0.001。
搜索性能在处理二维区域查询所花的挂钟时间方面,对本发明的各种索引树的搜索性能作了比较。生成同一大小的10000个不同查询矩形,其中心点均匀分布。查询矩形大小从数据空间的0.01%到1%变化。由于数据空间是单位方形,因而查询选择性大致与查询矩形大小相同。
图9A和图9B示出了搜索各种索引所花的测量经过时间,各种索引大量装有均匀数据集,以使各节点为70%已满。随着节点大小增加,搜索时间快速接近最小值。在经过最小值之后,搜索时间缓慢增加。随着查询选择性增加,最小值向右移动。这种趋势对所有六种树都成立,从而与分析结果一致。
CR-tree、PE CR-tree和SE CR-tree形成最快组。R-tree和PE R-tree形成最慢组。FF CR-tree位于这两组之间。
尽管SE CR-tree比CR-tree和PE CR-tree都宽,然而其性能较两者都差。这是由于SE CR-tree使用一节点的父母节点中的匹配条目来计算该节点的参考MBR。在本实施中,该计算涉及约40条指令和16字节的存储器写入。
图10A和图10B示出了搜索大量装有非均匀数据集的索引所花的测量经过时间。从图10A和图10中看出,差别不是很明显,这表明,就任何节点大小而言,所有六种树针对非均匀性或多或少是具有鲁棒性的。
图11A和图11B表明,CR-tree随着基数而很好地改变比例。在本实验中,查询矩形大小被设定为基数的倒数,以使所查找到的数据对象数几乎相同。
更新性能为了测量更新性能,把100000个数据对象插入大量装有1M均匀数据集的树,然后从该树中消除100000个随机选择的数据对象。
图12A和图12B分别示出了每次插入和删除的测量经过时间。对于给定节点大小,当插入时,CR-tree花费的时间比R-tree约多15%。然而,当扇出相同(例如,CR-tree的节点大小为256字节,R-tree的节点大小为640字节)时,CR-tree的性能与R-tree相同或好于R-tree。原因如下。
当把树下降以用于插入时,选择需要最小放大的子女节点。由于在本实施中,放大计算用去约30条指令,因而它在CR-tree及其变型中,比高速缓存未命中要昂贵。由于在CR-tree中,单个高速缓存块包含约5.6个QRMBR,因而放大计算成本约为每个高速缓存块168条指令,但在400MHz UltraSPARC II上,高速缓存未命中花费约80~100个处理器周期。另一方面,由于针对各个高度,插入仅存取一个节点,因而存取节点数在扇出方面以对数形式减少,但是各节点的放大计算数随着扇出而以线性方式增加。因此,放大计算总数随着扇出而增加。
PE R-tree的性能比R-tree略差,因为它使扇出增加不到25%。由于CR-tree的扇出比R-tree的扇出约大150%,因而就给定节点大小而言,CR-tree的性能比R-tree差。由于PE CR-tree的扇出比R-tree的扇出约大400%,因而就给定节点大小而言,PE CR-tree的性能比R-tree差得多。另一方面,当扇出相同时,通过当节点MBR放大或缩小时避免高速缓存未命中和QRMBR更新开销来确定CR-tree的排序。
图12B表明,删除排序略微不同于插入排序。删除是高选择搜索和节点更新的组合。正如从图9A和图9B预计的那样,随着查询选择性减少,CR-tree的性能类似于R-tree。另一方面,随着节点大小增加,节点更新更昂贵,因为QRMBR的更新成本增加。因此,当节点大小较少时,CR-tree的性能比R-tree好,但随着节点大小增加,两者性能会交叠。
图13A和图13B示出了在插入和删除之后的测量搜索时间。进行本实验是为了检查插入和删除是否影响树的质量。如图9A和图9B所示,就动态插入和删除而言,这些树具有鲁棒性。
量化层数的影响为了评价量化层数的影响,对由量化引起的假命中率、以MBR大小为单位的量化误差、以及三种不同量化层数,即24、28和216的搜索时间作了测量。这三种不同量化层数分别与2字节、4字节和8字节的QRMBR对应。本实验使用大量装有1M均匀数据集的树。
图14A、图14B和图14C示出了针对不同量化层数而测量的假命中率。以上表明,假命中率可通过(1+2f/l2N/(s+a))2-1]]>来估算。假命中率随着扇出或者节点大小而增加,并且随着量化层数和查询选择性而减少。测量结果与分析结果一致。当量化成16位时,搜索结果几乎与查询的精确应答相同。当量化成8位时,搜索结果包含的数据对象与精确应答相比最多多1%。只有当查询选择性较高时,才能使用量化成4位这种作法。
图15A和图15B示出了针对不同量化层数所测量的MBR大小的增加。上述分析表明,对于叶节点,量化单元大小大致为f/(l2N),并且QRMBR把其原始MBR沿各轴延伸了单元长度。因此,QRMBR大小随着扇出或者节点大小而增加,并且随着量化层数而减少。测量结果与分析结果一致。当量化成16位时,MBR大小增加不到0.01%。当量化为8位时,根据节点大小,MBR大小可增加1~7%,但这不会导致与图15A、图15B和图15C所示的搜索结果大小相同的增加。
图16A、图16B和图16C示出了在不同量化层数情况下所测量的搜索时间。这些图表明,当查询选择性较低并且节点大小较大时,粗量化会导致搜索时间延长。这是由于假命中数较大所致。总之,随着查询选择性和基数增加,可量化成较少位,但是随着节点大小增加,有必要量化成更多位。
图17A和图17B示出了存取索引数据量,当最初未对索引数据进行高速缓存时,或者在高速缓存未命中的最坏情况下,该存取索引数据量为L2高速缓存未命中数。就最坏情况的高速缓存未命中而言,六种树从最好到最坏的排列次序为SE CR-tree,PE CR-tree,CR-tree,FF CR-tree,PE R-tree,R-tree。如图9A和图9B所示,前三个形成一组,后两个形成另一组。该测量结果也与图6A和图6B的分析结果一致。
图18A和图18B示出了使用Perfmon工具测量的L2高速缓存未命中数。UltraSPARC处理器提供两个寄存器计数器,用于测量处理器事件。Perfmon工具用于使这些寄存器计数器对L2高速缓存未命中计数,并用于读取存储在计数器内的值。由于高速缓存命中和遗漏指令,因而L2高速缓存未命中数略微不同于存取索引数据量。由遗漏指令引起的L2高速缓存未命中解释了当节点大小和查询选择性都较低时,测量高速缓存未命中数为何会大于图17A和图17B中的最坏情况高速缓存未命中数。
还可看出,高速缓存命中率随着节点大小而增加。这可由处理器的高速缓存置换策略来解释。由于存储器块被循环地映射为高速缓存块(例如,由物理地址模数以高速缓存大小为模),因而高速缓存后的存储器块将不由连续存储器块来置换。随着节点大小增加,对连续存储器块的存取部分增加,因此,高速缓存命中率也随后增加。
图19A和图19B示出了在不同选择性的情况下测量的关键字比较数。与高速缓存未命中数相比,QRMBR技术不会减少关键字比较数,而是使其略微增加。由于在本实施中,两个MBR之间的重叠测试用去平均不到10条指令,因而避免L2高速缓存未命中比避免至少10个重叠测试更值得。R-tree和PE R-tree具有类似的扇出,并形成一组。PE CR-tree和SECR-tree也具有类似的扇出,并形成另一组。
并行性控制为了使通过CR-tree实现的性能改善保持显著,需要对索引并行性控制方案进行匹配优化。
由于常规基于散列的加锁/解锁操作对于主存储器数据库来说太昂贵,因而提出了一种更快速的加闩锁和解闩锁操作。通过静态分配加闩锁数据结构,并使其直接可寻址而无需散列,该加闩锁和解闩锁操作使用约20条CISC(IBM 370)指令,这可相当于约100条RISC指令。然而,加闩锁和解闩锁操作对于主存储器索引树的并行性控制来说仍很昂贵,因为使用CSB+-tree和公知加锁耦合技术的本实验表明,各节点仅被加锁约40个处理器周期。
为了防止加锁操作产生附加的高速缓存未命中,用于加锁的数据结构需要保持在匹配索引节点内。为了使之可行,用于加锁的数据结构应尽可能小。例如,本提议从各节点仅使用一个字节。
即使出现加锁冲突,然而这将典型地在几十或几百个时钟周期内予以解决。因此,用于加锁的自旋优于封锁,后者会导致上下文转接用去最多数千条指令。
除了使加锁操作廉价之外,合乎需要的是减少加锁操作次数。这可通过倾向于在诸如目录服务器那样的查找强化应用中搜索来实现。例如,如果现在未进行更新,可使搜索操作给整个树加锁,或者通过使用反转技术使搜索操作不进行任何加锁。
恢复由于本发明可把索引大小减少几乎60%,因而本发明还可通过缩短磁盘存取时间来加速检查点(checkpointing)和崩溃后重新启动过程。
在主存储器数据库系统中,事务处理耐久性可通过日志记录和临时检查点来实现。主存储器数据库中的检查点是把内存驻留数据库的快照(snapshot)保存到磁盘上的处理。崩溃后重新启动处理包括装入最新快照,以及重放在最新检查点之后生成的日志记录。因此,显而易见,在检查点和重新启动过程中的磁盘存取时间随着索引大小收缩而减少。例如,与B+-tree相比,CSB+-tree的磁盘存取时间减少10%,并且与R-tree相比,CR-tree的磁盘存取时间减少到不足一半。
图20A和图20B表明,分析结果与实验结果一致。
尽管已参照优选实施例对本发明作了说明,然而本发明不限于这些实施例。本领域普通技术人员将意识到的是,可在不背离本发明的精神和范围的情况下,可对上述实施例的结构和形式作许多修改。
权利要求
1.一种方法,用于提高对驻留在主存储器内的多维索引结构进行存取的高速缓存性能,以有助于查看存储在数据库中的数据对象,其中,索引结构包括内部节点,其具有指向子女节点的指针;以及叶节点,其具有指向数据库对象的指针;该方法包括以下步骤使最小边界矩形(“MBR”)与每个节点相关,其中,各MBR均是最小超矩形,其在叶节点情况下封闭相应数据对象,并在内部节点情况下封闭在子女节点内的所有超矩形;采用MBR的相对表示(“RMBR”)来逐个表示一个或多个所述MBR,MBR的相对表示是相对于一个参考MBR的坐标所表示的MBR的坐标;以及通过按照有限精度来量化各RMBR并在量化后切掉尾随无效位,把各RMBR压缩成量化RMBR(“QRMBR”)。
2.根据权利要求1所述的方法,其中,所述多维索引结构是R-tree。
3.根据权利要求1所述的方法,其中,所述多维索引结构是R*-tree。
4.根据权利要求1所述的方法,其中,所述多维索引结构是R+-tree。
5.根据权利要求1所述的方法,其中,所述多维索引结构是Hilbert R-tree。
6.根据权利要求1所述的方法,其中,各内部节点均具有多个条目,其中,第一条目具有QRMBR和指针,而剩余条目仅具有QRMBR。
7.根据权利要求1所述的方法,其中,各节点均存储一个参考MBR。
8.根据权利要求1所述的方法,其中,一节点的参考MBR是从存储在该节点的父母节点中的相应QRMBR来获得。
9.根据权利要求1所述的方法,其中,内部节点存储QRMBR,而叶节点存储MBR。
10.根据权利要求1所述的方法,其中,所述数据库驻留在主存储器内。
11.根据权利要求1所述的方法,其中,所述数据库驻留在磁盘内。
12.一种方法,用于提高对驻留在主存储器内的多维索引结构进行存取的高速缓存性能,以有助于查看存储在数据库中的数据对象,其中,索引结构包括内部节点,其具有指向子女节点的指针;以及叶节点,其具有指向数据库对象的指针;该方法包括以下步骤使最小边界形状与每个节点相关,最小边界形状是一个多维形状,该多维形状在叶节点情况下封闭相应数据对象,并在内部节点情况下封闭在子女节点内的所有最小边界形状;采用相对表示来逐个表示一个或多个所述最小边界形状,该相对表示是相对于一个参考最小边界形状的坐标所表示的最小边界形状的坐标;以及通过按照有限精度来量化各相对表示并在量化后切掉尾随无效位,把各相对表示压缩成量化表示。
13.根据权利要求12所述的方法,其中,各内部节点均具有多个条目,其中,第一条目具有量化表示和指针,而剩余条目仅具有量化表示。
14.根据权利要求12所述的方法,其中,一节点的参考最小边界形状是从存储在该节点的父母节点中的相应量化表示来获得。
15.根据权利要求12所述的方法,其中,所述数据库驻留在主存储器内。
16.根据权利要求12所述的方法,其中,所述数据库驻留在磁盘内。
17.一种多维索引结构,用于有助于查看存储在数据库中的数据对象,该多维索引结构包括多个节点,用于形成树,该多个节点包括内部节点,其具有指向子女节点的指针;以及叶节点,其具有指向数据对象的指针;最小边界矩形(“MBR”),其中,各MBR均是最小超矩形,其在叶节点情况下封闭相应数据对象,并在内部节点情况下封闭在子女节点内的所有超矩形;以及量化的参考MBR(“QRMBR”),针对一个参考MBR,相对于该量化的参考MBR计算一个MBR的相对表示,并按照有限精度来量化该相对表示。
18.根据权利要求17所述的索引结构,其中,所述树是R-tree。
19.根据权利要求17所述的索引结构,其中,所述树是R*-tree。
20.根据权利要求17所述的索引结构,其中,所述树是R+-tree。
21.根据权利要求17所述的索引结构,其中,所述树是HilbertR-tree。
22.根据权利要求17所述的索引结构,其中,各内部节点均具有多个条目,其中,第一条目具有QRMBR和指针,而剩余条目仅具有QRMBR。
23.根据权利要求17所述的索引结构,其中,各节点均存储一个参考MBR。
24.根据权利要求17所述的索引结构,其中,一节点的所述参考MBR是从该节点的父母节点中的参考MBR来获得。
25.根据权利要求17所述的索引结构,其中,所述参考MBR仅被存储在根节点内。
26.根据权利要求17所述的索引结构,其中,内部节点存储QRMBR,而叶节点存储MBR。
27.根据权利要求17所述的索引结构,其中,所述数据库驻留在主存储器内。
28.根据权利要求17所述的索引结构,其中,所述数据库驻留在磁盘内。
29.一种索引树,用于有助于查看存储在数据库中的数据对象,该索引树包括多个节点,其包括内部节点,其具有指向子女节点的指针;以及叶节点,其具有指向数据对象的指针;最小边界形状,其是一种最小多维形状,该最小多维形状在叶节点情况下封闭相应数据对象,并在内部节点情况下封闭在子女节点内的所有边界形状;以及最小边界形状的量化相对表示,其是相对于一个参考边界形状而计算,并通过切掉尾随无效位按照有限精度来量化。
30.根据权利要求29所述的索引树,其中,所述多个节点形成R-tree。
31.根据权利要求29所述的索引树,其中,所述数据库驻留在主存储器内。
32.根据权利要求29所述的索引树,其中,所述数据库驻留在磁盘内。
全文摘要
本发明揭示了一种高速缓存感知类型的R-tree,被称为CR-tree。为了把更多条目组合在一个节点内,CR-tree压缩MBR关键字,这些MBR关键字占用索引数据的主要部分。CR-tree首先相对于MBR的父母MBR的左下角来表示MBR关键字的坐标,以便从相对坐标表示中消除前导零。然后,CR-tree使用固定位数来量化相对坐标,以便进一步切掉尾随较低有效位。因此,CR-tree比普通R-tree宽得多和小得多,实验和分析结果表明,二维CR-tree执行搜索的速度比普通R-tree快,同时保持类似的更新性能,并耗用较少存储空间。
文档编号G06F17/30GK1462399SQ02801435
公开日2003年12月17日 申请日期2002年3月5日 优先权日2001年3月5日
发明者金起弘, 车相均, 权槿周 申请人:处理存储器有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1