一种基于T-lt树的主存数据库的索引方法

文档序号:6481807阅读:205来源:国知局
专利名称:一种基于T-lt树的主存数据库的索引方法
技术领域
本发明涉及一种数据库索引方法,主要应用在基于主存的数据库管理系统中,属于 计算机数据库领域。
背景技术
随着大容量内存越来越便宜,现在配置一台大内存的计算机也越来越容易。对数据 库系统而言,已经有条件将数据库的"主版本"常驻内存,这样可使系统性能获得很大 的改善,如1/0操作大量减少、事务的状态转换及其相联CPU高速缓存的替换大量减
少、锁的竞争下降,更有效的内存査找结构和査询处理可以被使用等。
数据库的"主版本"或者整个数据库都常驻内存的数据库系统被称为主存数据库
(MMDB, Main Memory Database)。由于内存系统与磁盘系统具有不同的特性,因而 MMDB与磁盘数据库(DRDB, Disk-Resident Database)在性能、存储格式、尤其是査询 处理等方面都有着比较大的差别。DRDB系统的"瓶颈"是磁盘I /0,故查询处理的 优化策略主要是针对减少磁盘的存取次数的,并且尽量存储临时结果,以"空间"换"时 间"。而在MMDB中,由于内存空间及其宝贵,其査询处理算法则要极力减少比较次 数,并且尽量不存储临时结果,以"时间"换"空间"。在这样的前提下,原有的DRDB 的索引结构对MMDB来说就不再适用了,研究新的适合MMDB的索引结构也就自然 而然的成了研究者关注的问题。
传统的主存数据库主要采取以下几种索引机制
(1) 哈希索引机制是一种通过哈希函数实现键值和记录地址快速映射,以提供高 速随机访问的机制。使用哈希机制能实现快速査询,但它对空间的利用率不高,并且范围 査询的效率也不高。
(2) 平衡二叉树(AVL树)索引机制AVL树本质上是一棵二叉树,采用二分査找法, 査询速度很快。但AVL树上的更新操作经常导致树的不平衡,用于平衡旋转操作的时 间开销过大。而且树的每个结点只能保存1个关键字用于比较,同时还要保存父结点指 针、左右孩子结点指针、平衡因子等其他信息,故Cache利用率较低。
4(3) B树索引机制B树是一种适用于磁盘数据库管理系统的索引机制。B树的每 个结点有多棵子树,且深度不大,査询速度较快,只需较少次数的磁盘I/0就可以找到 目标数据。B树中的叶结点较多,由于叶结点没有子树指针,故指针相对数据的空间占 用量很小,从而有利于提高内存空间的利用率。8树的一个变种8+树,则是一种平衡 的多路查找树,已经在传统的磁盘数据库中得到了广泛的应用。由于B +树的非叶结 点仅具有索引作用,与记录有关的信息均存放在叶结点中,因此会对存储空间造成一定 的浪费。
(4) T树索引机制是一种适用于主存数据库的有序数据索引机制,在大部分主存 数据库系统中都有应用。它是由AVL树和B树演变而来,是一种在一个结点中存放多 个元素的平衡二叉树。它保留有AVL树的二分搜索特性,同时具有B树的优良的存储 性能。T树的每个结点可以保存多个关键字,因而提高了空间的利用率。但是,对T 树结点的更新会导致树的不平衡,因此用于平衡旋转的开销还是比较大的。
现有的相关专利申请情况如下-
① 海量数据内存数据库中快速定位的网格+T树索引的方法(申请日期-2006.02.20,公开号CN1838124)。
② 数据库索引的方法(申请日期2008.05.30,公开号CN101286160)。 相关的论文情况如下
① R.Bayer and E.M.McCreight, Organization and maintenance of large ordered indexes, Acta Informatica, 1972.
② Douglas Comer, The Ubiquitous B-Tree, Computing Surveys (CSUR), 1979.
③ TJ Lehman, MJ Carey. A Study of Index Structures for Main Memory Database Management Systems. Conference on Very Large Data Bases, 1986:294~302.
其中专利②和论文①、②都是关于B树和B+树的索引机制,适用于基于磁盘的数 据库索引机制,并不适用于主存数据库,在时空开销上类似于平衡二叉树;专利①和论 文③都是关于T树的索引机制,虽然T树是基于主存的数据库的一种比较优秀的索引 机制,但是,对T树结点的更新会导致树的不平衡,因此用于平衡旋转的开销还是比 较大的。

发明内容
本发明的目的是提供一种用于主存数据库索引方法,该方法能在主存数据库中提高査询效率,节省时空开销。
本发明针对T树的缺点进行改进,提出了一种新的基于主存的索引结构,称之为 T-lt树,T-lt树的结点结构(T-lt结点)比T结点多了一个尾指针,如果该结点有tail 结点,则尾指针指向tail结点;如果没有tail结点,则指向直接后继结点。T-lt树 的tail结点与T结点相比也多了一个指向直接后继结点的指针。
本发明为实现上述目的采用下面的技术方案
本发明的基于T-lt树的主存数据库的索引方法,将T树的每个结点都增加一个直 接指向此结点的后继结点的尾指针构成T-lt树,所述索引方法包括数据库查询操作、 关键字插入操作、关键字删除操作三个步骤,其中
(一) 数据库查询操作步骤
A、 开始操作,设T-lt树根结点为当前结点;
B、 判断当前结点是否为空,当结果为是,则结束操作,返回未搜索到;当结果为否, 进入下一步骤;
C、 判断搜索值是否小于当前结点的最小值,当结果为是,则设左子结点为当前结点, 返回步骤B,继续进行搜索操作;当结果为否,进入下一步骤;
D、 判断搜索值是否大于当前结点的最大值,当结果为是,则设右子结点为当前结点, 返回步骤B,继续进行搜索操作;当结果为否,则进入下一步骤;
E、 在当前结点和其tail结点中进行二分査找,结束操作,并返回搜索结果;
(二) 关键字插入操作步骤
F、 开始操作,设T-lt树根结点为当前结点;重复上述(一)数据库査询操作步骤 A E,在E步骤中将当前结点作为范围结点;
G、 判断是否找到范围结点,当没有找到范围结点,则将搜索路径中的最后一个结点
作为范围结点,进入下一步骤;
H、 当寻找到范围结点,继续判断该范围结点是否已满;
① 、当该范围结点未满,判断该范围结点是否含有tail结点或者原始结点未满;
a、 当结果为是,将待插入元素按一定的顺序插入范围结点,结束操作;
b、 当结果为否,则在该范围结点中添加tail结点,使tail结点的尾指针指向原范 围结点的后继结点,原范围结点的尾指针则指向该tail结点,然后将待插入值插入到 新的范围结点中,结束操作;
② 、当该范围结点已满,进行以下操作
c、 通过该范围结点的tail结点的后继指针找到其直接后继结点,然后将tail结点移出,作为其后继结点的左子结点,最后将待插入元素插入原范围结点或者新的子结点;
d、 判断T-lt树是否失去平衡,当树失去平衡,则进行旋转操作使树平衡,然后结 束操作;当T-lt树未失去平衡,则结束操作;
(三)关键字删除操作步骤-
I、开始操作,设T-lt树根结点为当前结点;重复上述(一)数据库查询操作步骤
A E,在E步骤中将当前结点作为范围结点;
J、判断是否找到范围结点,当没有找到范围结点,则操作失败退出;
K、当寻找到范围结点,在该范围结点内删除待删元素,判断删除元素是否会导致下
溢;
(1) 、如果在该范围结点内删除待删元素不会导致下溢,判断删除后是否会导致tail 结点为空;
e、 当判断结果不会导致tail结点为空,则结束操作;
f、 当判断结果导致tail结点为空,则删除该tail结点,结束操作;
(2) 、如果在该范围结点内删除待删元素会导致下溢,则判断该范围结点是否为内部 结点;
g、 如果该范围结点是一个内部结点,进行以下操作 i通过该范围结点的后继指针找到其直接后继结点; ii将后继结点的最小元素移入该范围结点中;
iii判断该后继结点是否为空,如果后继结点不为空,则直接进入下述L步骤;如果
后继结点为空,则删除该后继结点后进入下述L步骤;
h、 如果该范围结点不是一个内部结点,判断该范围结点是否为叶子结点 iv当该范围结点不是叶子结点,则直接结束操作;
V当该范围结点是叶子结点,则判断进行删除操作后是否会导致该结点为空,如果 该结点不为空,则直接进入下述L步骤;如果该结点为空,则删除该结点后进入下述L 步骤;
L、判断T-lt树是否失去平衡,当树失去平衡,则进行旋转操作使树平衡,然后结 束操作;当T-lt树未失去平衡,则结束操作。 相关说明
(l)T-lt树主要是针对T树的缺点进行改进,得到的一种新的基于主存的索引结
构,T-lt树的结点结构(T-lt结点)比T结点多了一个尾指针,如果该结点有tail 结点,则尾指针指向tail结点;如果没有tail结点,则尾指针指向直接后继结点。T-lt树的tail结点与T结点相比也多了一个指向直接后继结点的指针。
(2) T-lt结点每个T-It结点都包含一系列从小到大排序后的元素、控制信息和 四个指针。指针分别指向父结点、左子树、右子树以及tail结点(存在tail结点)或 者后继结点(不存在tail结点)。在T-lt结点的控制信息中包含平衡因子和结点当前 的元素数目。平衡因子(其值可为O、 -1、 1)用于维护T-lt树的平衡,表示左子树和 右子树的高度之差。
(3) 下限和上限下限规定了每个T-lt结点内的最小元素个数,上限规定了每个 T-lt结点内的最大元素个数。当某个T-lt结点的当前元素数小于下限时就必须进行下 溢调整操作,当某个T-It结点的当前元素数大于上限时就必须进行上溢调整操作。
(4) tail结点tail结点结构与T-It结点结构类似,当对T-It树进行插入操作时, 如果待插入结点已满,则创建一个tail结点,所有待插元素都被插入到tail结点中, 如果tail结点也满了,则将tail结点作为一个普通T-lt结点插入到T-It树中。同样, 在对T-lt树的删除操作中,发生下溢时,首先将tail结点中的元素移至当前结点,如 果tail结点已空,则直接删除tail结点,通过tail结点可以有效的减少对树的旋转 操作。
(5) 尾指针尾指针为一后继指针,当某T-lt结点存在tail结点时,则尾指针指 向它的tail结点,否则,指向它的后继结点。tail结点的尾指针则指向原T-It结点 的后继结点。
(6) 原始结点不含tail结点的T-lt结点部分。
有益效果
本发明采用上述技术方案,与现有技术相比具有下面的优点
1. 减少对树的遍历次数
在T树中,如果要寻找当前结点的后继结点的话,必须通过遍历找到该结点的右子 树的最左子结点,或者通过遍历找到一个祖先结点使得它的左子树的最右子结点是当前 结点,并且这种寻找后继结点的操作在T树中相当频繁。而在T-lt树中,其结点比T
结点多了一个指向后继结点的指针,可以通过这个指针找到它的直接后继结点,而不需 要对树进行遍历操作,对于范围查询和顺序搜索这种査询处理,可以提高效率。对于插 入和删除引起的上溢和下溢操作也可以直接定位到后继结点。
2. 减少树的旋转次数
在对T树进行插入或者删除操作的时候,如果发生上溢或者下溢后,最后结点己满或者已空,则必须插入一个新的T结点或者删除一个结点,有可能会导致T树失去平衡, 要对T树进行旋转操作来恢复平衡。通常对T树索引的维护过程中,旋转操作是非常频 繁并且耗时的。当对T-lt树进行插入操作时,如果待插入结点已满,则创建一个tail 结点,所有待插元素都被插入到tail结点中,如果tail结点也满了,则将tail结点 作为一个普通T-lt结点插入到T-lt树中。同样,在对T-lt树的删除操作中,发生下 溢时,首先将tail结点中的元素移至当前结点,如果tail结点已空,则直接删除tail 结点,通过tail结点可以有效的减少对树的旋转操作。


图1是一棵不带tail结点的T-It树,每个节点的尾指针直接指向它的后继结点。 图2是T-lt树的结点,它包含一个tail结点,原结点的尾指针指向该tail结点, tail结点的尾指针则指向它的后继结点。 图3是T-lt树査询操作的执行流程。 图4是T-It树插入操作的执行流程。 图5是T-lt树删除操作的执行流程。
图6是更新密度对基于T树和基于T-lt树两种索引性能的影响。 图7是树的大小对基于T树和基于T-It树两种索引性能的影响。
具体实施例方式
下面结合附图对本发明的技术方案进行详细说明
如附图1所示,不带tail结点的T-lt树中的每个结点与T树结点类似,只是每个 结点都多了一个直接指向它的后继结点的尾指针,便于寻找后继结点。
如附图2所示,每个T-lt结点都包含一系列从小到大排序后的元素、控制信息和 四个指针。指针分别指向父结点、左子结点、右子结点以及tail结点(存在tail结点) 或者后继结点(不存在tail结点)。在T-lt结点的控制信息中包含平衡因子和结点当 前的元素数目。平衡因子(其值可为O、 -1、 1)用于维护T-lt树的平衡,表示左子树 和右子树的高度之差。
如附图3所示,T-lt树査询操作的具体执行流程如下
A、 开始操作,设T-lt树根结点为当前结点;
B、 判断当前结点是否为空,当结果为是,则结束操作,返回未搜索到;当结果为否,进入下一步骤;
C、 判断搜索值是否小于当前结点的最小值,当结果为是,则设左子结点为当前结点, 返回步骤B,继续进行搜索操作;当结果为否,进入下一步骤;
D、 判断搜索值是否大于当前结点的最大值,当结果为是,则设右子结点为当前结点, 返回步骤B,继续进行搜索操作;当结果为否,则进入下一步骤;
E、 在当前结点和其tail结点中进行二分査找,结束操作,并返回搜索结果; 如附图4所示,T-lt树插入操作的具体执行流程如下
F、 开始操作,设T-lt树根结点为当前结点;重复上述査询操作步骤A E,在E步 骤中将当前结点作为范围结点,不再进行二分査找;
G、 判断是否找到范围结点,当没有找到范围结点,则将搜索路径中的最后一个结点 作为范围结点,进入下一步骤;
H、 当寻找到范围结点,继续判断该范围结点是否已满;
① 、当该范围结点未满,判断该范围结点是否含有tail结点或者原始结点未满;
a、 当结果为是,将待插入元素按一定的顺序插入范围结点,结束操作;
b、 当结果为否,则在该范围结点中添加tail结点,使tail结点的尾指针指向原范 围结点的后继结点,原范围结点的尾指针则指向该tail结点,将原范围结点和tail 结点作为新的范围结点,然后将待插入值插入到新的范围结点中,结束操作;
② 、当该范围结点已满,进行以下操作
c、 通过该范围结点的tail结点的后继指针找到其直接后继结点,然后将tail结点 移出,作为其后继结点的左子结点,最后将待插入元素插入原范围结点或者新的子结点;
d、 判断T-lt树是否失去平衡,当树失去平衡,则进行类似于T树的旋转操作使树 平衡,然后结束操作;当T-lt树未失去平衡,则结束操作;
如附图5所示,T-lt树删除操作的具体执行流程如下 I、开始操作,设T-lt树根结点为当前结点;重复上述(一)数据库査询操作策略
步骤A E,在E步骤中将当前结点作为范围结点;
J、判断是否找到范围结点,当没有找到范围结点,则操作失败退出;
K、当寻找到范围结点,在该范围结点内删除待删元素,判断删除元素是否会导致
下溢;
(1)、如果在该范围结点内删除待删元素不会导致下溢,判断删除后是否会导致tail结点为空;
e、 当判断结果不会导致tail结点为空,则结束操作。
f、 当判断结果导致tail结点为空,则删除该tail结点,结束操作;
(2)、如果在该范围结点内删除待删元素会导致下溢,则判断该范围结点是否为内部 结点;
g、 如果该范围结点是一个内部结点,进行以下操作 i通过该范围结点的后继指针找到其直接后继结点; ii将后继结点的最小元素移入该范围结点中;
iii判断该后继结点是否为空,如果后继结点不为空,则直接进入L步骤;如果后继 结点为空,则删除该后继结点后进入L步骤;
h、 如果该范围结点不是一个内部结点,判断该范围结点是否为叶子结点 iv当该范围结点不是叶子结点,则直接结束操作;
v当该范围结点是叶子结点,则判断进行删除操作后是否会导致该结点为空,如果 该结点不为空,则直接进入L步骤;如果该结点为空,则删除该结点后进入L步骤;
L、判断T-lt树是否失去平衡,当树失去平衡,则进行旋转操作使树平衡,然后结 束操作;当T-lt树未失去平衡,则结束操作。
为了测试基于T-lt树的索引性能,我们同时实现了基于T树的索引,对两者进行 比较。实验采用Pentium 4 2. 66GHz CPU、 512M内存的硬件环境进行试验,操作系统 为Fedra Core 5.0,所有程序用C语言实现。通过两组实验,分别测试了更新密度和 树的结点数目对索引性能的影响。在实验中,将对相应的索引结构进行1,000,000次操 作,包括査询,插入和删除。
图6显示了更新密度对索引性能的影响。在实验中T-lt树和T-树都含有2,000,000 个关键字,从图中可以看出基于T-lt树的索引性能比基于T树的索引性能更优。与基于 T树的方法相比,因为引入了一个指向直接后继结点的指针,减少了插入和删除操作中 因为上溢和下溢引起的遍历操作,并且由于Tail结点的引入,在更新操作中有效的减少 了旋转的次数,所以T-lt树的性能要优于T树。
图7显示了树的大小对索引性能的影响。在实验操作中,查询占40%,插入占30%,
删除占30%。从图中可以看出,随着树的关键字个数的增加,两种方法的性能都有了
一定的下降,但是基于T树的方法比基于T-lt树的方法受树的大小影响更大。
11我们以自主研发的安全数据库管理系统一NHSecure为例,进一步说明该发明的具 体实施方式
(1) 在创建好数据表后,我们对给定的属性建立基于T-lt树的索引,并存入磁盘文 件中;
(2) NHSecure启动时,首先从磁盘中将数据文件和索引文件分别读入内存,在内存 中建立基于T-lt树的索引;
(3) 执行SQL操作时,只对内存中的数据和索引结构进行更新;
(4) 每隔一段时间的SQL操作后,NHSecure及时将更新过的数据文件和索引文件存 入磁盘;
(5) 在退出NHsecu:re时,先将数据文件和索引文件分别存入相应的磁盘文件中,再退出。
权利要求
1、一种基于T-lt树的主存数据库的索引方法,其特征在于将T树的每个结点都增加一个直接指向此结点的后继结点的尾指针构成T-lt树,所述索引方法包括数据库查询操作、关键字插入操作、关键字删除操作三个步骤,其中(一)数据库查询操作步骤A、开始操作,设T-lt树根结点为当前结点;B、判断当前结点是否为空,当结果为是,则结束操作,返回未搜索到;当结果为否,进入下一步骤;C、判断搜索值是否小于当前结点的最小值,当结果为是,则设左子结点为当前结点,返回步骤B,继续进行搜索操作;当结果为否,进入下一步骤;D、判断搜索值是否大于当前结点的最大值,当结果为是,则设右子结点为当前结点,返回步骤B,继续进行搜索操作;当结果为否,则进入下一步骤;E、在当前结点和其tail结点中进行二分查找,结束操作,并返回搜索结果;(二)关键字插入操作步骤F、开始操作,设T-lt树根结点为当前结点;重复上述(一)数据库查询操作步骤A~E,在E步骤中将当前结点作为范围结点;G、判断是否找到范围结点,当没有找到范围结点,则将搜索路径中的最后一个结点作为范围结点,进入下一步骤;H、当寻找到范围结点,继续判断该范围结点是否已满;①、当该范围结点未满,判断该范围结点是否含有tail结点或者原始结点未满;a、当结果为是,将待插入元素按一定的顺序插入范围结点,结束操作;b、当结果为否,则在该范围结点中添加tail结点,使tail结点的尾指针指向原范围结点的后继结点,原范围结点的尾指针则指向该tail结点,然后将待插入值插入到新的范围结点中,结束操作;②、当该范围结点已满,进行以下操作c、通过该范围结点的tail结点的后继指针找到其直接后继结点,然后将tail结点移出,作为其后继结点的左子结点,最后将待插入元素插入原范围结点或者新的子结点;d、判断T-lt树是否失去平衡,当树失去平衡,则进行旋转操作使树平衡,然后结束操作;当T-lt树未失去平衡,则结束操作;(三)关键字删除操作步骤I、开始操作,设T-lt树根结点为当前结点;重复上述(一)数据库查询操作步骤A~E,在E步骤中将当前结点作为范围结点;J、判断是否找到范围结点,当没有找到范围结点,则操作失败退出;K、当寻找到范围结点,在该范围结点内删除待删元素,判断删除元素是否会导致下溢;(l)、如果在该范围结点内删除待删元素不会导致下溢,判断删除后是否会导致tail结点为空;e、当判断结果不会导致tail结点为空,则结束操作;f、当判断结果导致tail结点为空,则删除该tail结点,结束操作;(2)、如果在该范围结点内删除待删元素会导致下溢,则判断该范围结点是否为内部结点;g、如果该范围结点是一个内部结点,进行以下操作i通过该范围结点的后继指针找到其直接后继结点;ii将后继结点的最小元素移入该范围结点中;iii判断该后继结点是否为空,如果后继结点不为空,则直接进入下述L步骤;如果后继结点为空,则删除该后继结点后进入下述L步骤;h、如果该范围结点不是一个内部结点,判断该范围结点是否为叶子结点iv当该范围结点不是叶子结点,则直接结束操作;v当该范围结点是叶子结点,则判断进行删除操作后是否会导致该结点为空,如果该结点不为空,则直接进入下述L步骤;如果该结点为空,则删除该结点后进入下述L步骤;L、判断T-lt树是否失去平衡,当树失去平衡,则进行旋转操作使树平衡,然后结束操作;当T-lt树未失去平衡,则结束操作。
全文摘要
本发明提供一种基于T-lt树的主存数据库的索引方法,主要是针对T树的缺点进行改进,将T树的每个结点都增加一个直接指向此结点的后继结点的尾指针构成T-lt树,所述索引方法包括数据库查询操作、关键字插入操作、关键字删除操作三个步骤,T-lt树的结点结构比T结点多了一个尾指针,如果该结点有tail结点,则尾指针指向tail结点;如果没有tail结点,则尾指针指向直接后继结点。T-lt树的tail结点与T结点相比也多了一个指向直接后继结点的指针。本方法减少对树的遍历次数,减少树的旋转次数,能在主存数据库中提高查询效率,节省时空开销。
文档编号G06F17/30GK101587484SQ20091003341
公开日2009年11月25日 申请日期2009年6月19日 优先权日2009年6月19日
发明者华 戴, 柏传杰, 秦小麟 申请人:南京航空航天大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1