一种实时数据库的b+树索引方法及装置的制作方法

文档序号:6438775阅读:190来源:国知局
专利名称:一种实时数据库的b+树索引方法及装置的制作方法
技术领域
本发明属于数据处理领域,尤其涉及一种实时数据库的B+树索引方法及装置。
背景技术
随着现今数据量的不断扩充,数据库中的数据不断增多,在应用时要求数据库具有主动、实时、时效等特性。其中,索引是提高数据库系统执行效率的一种有效工具。由于实时数据库的索引受内存的快速存取以及高有效利用率的影响,因此适用于实时数据库的索引结构大致可以分为两大类一类是数据保持某种自然排序的索引结构,如各种数据结构; 另一类是数据随机分布的索引结构,如各种哈希结构。传统索引结构主要有下列三种,以下将详细描述。第一,采用数组做索引结构。其具体方法为通过预先知道数据的大小或者通过虚拟存储映射技术而使数据妥当增长,使数组索引使用的空间最小。然而,数组索引结构不能动态维护,每一维护操作所引起的数据移动量是O(n)级的(η为数组元素个数),使得维护代价过高。且数组索引结构实用性不强。第二,采用AVL树(一种自平衡二叉查找树)做索引结构。由于AVL树操作的时间复杂度较小,为0(Log2N) (N为记录数),因此具有较高的存取性能。但是由于其每个结点只有一个数据元素,却有两个指针和有关指针信息,造成其内存的有效利用率很低。第三,采用B树(一种数据结构)做索引结构。B树是一种动态调节的平衡树,B树的操作代价是o( Logk + l + l-^- +C),其中,
k是B树的阶(0rder),N是记录数,C是一个很小的整数。然而,将B树作为索引结构时,由于关键字分布在整个B树中,并且在内结点(叶结点以外的结点)中出现过的关键字不再出现在叶结点中,使得顺序链不能将树中所有关键字链接在一起,这不利于需要顺序查找或排序的操作。其次,在B树中,删除操作比较繁琐。因此,B树无法满足实时数据库高效的执行效率。

发明内容
本发明实施例的目的在于提供一种实时数据库的B+树索引方法及装置,旨在解决现有的用于实时数据库的索引结构效率不高,实用性不强的问题。本发明实施例是这样实现的,一种实时数据库的B+树索引方法,所述方法包括根据实时数据库中表或记录的个数,获得节点个数,所述节点包括节点域和控制域;根据每个节点所需占用的内存空间,划分对应的内存空间用于存储每个节点的节点域和控制域;
将表或记录的关键字存储至节点的节点域,将指针信息存储至节点的控制域,以此生成各节点及B+树索引。本发明实施例的另一目的在于提供了一种实时数据库的B+树索引装置,所述装置包括节点个数获取单元,用于根据实时数据库中表或记录的个数,获得节点个数,所述节点包括节点域和控制域;内存划分单元,用于根据每个节点所需占用的内存空间,划分对应的内存空间用于存储每个节点的节点域和控制域;索引生成单元,用于将表或记录的关键字存储至节点的节点域,将指针信息存储至节点的控制域,以此生成各节点及B+树索引。在本发明实施例中,通过B+树来实现实时数据库的索引,提供了一种既高效,又稳定的索引方法。既提高了实时数据库的稳定性,又提高了实时数据库的性能,使得用户能够更加快捷地访问实时数据库。


图1是本发明实施例一提供的实时数据库的B+树索引方法流程图;图2是本发明实施例二提供的根据B+树索引查找关键字的实例;图3是本发明实施例三提供的根据B+树索引插入关键字的一种实例;图4是本发明实施例三提供的根据B+树索引插入关键字的一种实例;图5是本发明实施例四提供的根据B+树索引删除关键字的一种实例;图6是本发明实施例四提供的根据B+树索引删除关键字的一种实例;图7是本发明实施例五提供的实时数据库的B+树索引装置结构示意图。
具体实施例方式为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。本发明实施例提供一种实时数据库的B+树(一种数据结构)索引方法,通过重新定义B+树的节点域及控制域的数据结构后,创建B+树,利用B+树建立实时数据库的索引。本发明提供了一种实时数据库的B+树索引方法及装置所述方法包括根据实时数据库中表或记录的个数,获得节点个数,所述节点包括节点域和控制域;根据每个节点所需占用的内存空间,划分对应的内存空间用于存储每个节点的节点域和控制域;将表或记录的关键字存储至节点的节点域,将指针信息存储至节点的控制域,以此生成各节点及B+树索引。所述装置包括节点个数获取单元,用于根据实时数据库中表或记录的个数,获得节点个数,所述节点包括节点域和控制域;内存划分单元,用于根据每个节点所需占用的内存空间,划分对应的内存空间用于存储每个节点的节点域和控制域;索引生成单元,用于将表或记录的关键字存储至节点的节点域,将指针信息存储至节点的控制域,以此生成各节点及B+树索引。为了说明本发明所述的技术方案,下面通过具体实施例来进行说明。实施例一如图1所示为本发明提供的实时数据库的B+树索引方法的流程图,为了便于说明,仅示出了与本发明实施例相关的部分。在步骤SlOl中,根据实时数据库中表或记录的个数,获得节点个数,所述节点包括节点域和控制域。在本发明实施例中,由于索引既可以是实时数据库中表的索引,也可以是实时数据库中各条记录的索引。在B+树中,用一个节点来表示一个表或一条数据库中的记录,因此表的个数或记录的条数与节点个数相同。若是创建表的索引,则根据表的个数获得节点的个数;若是创建记录的索引,则根据记录的个数获得节点的个数。在本发明实施例中,节点包括节点域和控制域。其中,节点域用于存储节点信息, 此处即为表或记录的关键字;控制域用于存储指针信息,此处的指针信息包括但不限于 指向其他节点的指针及指向关键字对应的表或记录的指针。在步骤S102中,根据每个节点所需占用的内存空间,划分对应的内存空间用于存储每个节点的节点域和控制域。在本发明实施例中,由于每个节点的大小不同,占用的内存空间大小就不同。在计算出每个节点所占用的内存空间后,划分对应的内存空间用于存储每个节点的节点域和控制域。如将内存地址0X00到0X11的内存空间用于存储第一个节点的节点域。在步骤S103中,将表或记录的关键字存储至节点的节点域,将指针信息存储至节点的控制域,以此生成各节点及B+树索引。在本发明实施例中,将表或记录的关键字存储至各节点的节点域,并将表或记录的关键字作为节点的关键字,将指针信息(如指针信息)存储至节点的控制域,初始化B+ 树,生成各节点及B+树索引。在本发明实施例中,生成的B+树中每个节点的子树个数小于等于B+树的阶数,所述B+树每个分支所包括的子树个数大于等于B+树的阶数,所述B+树中除叶子节点外,其他节点至少有两颗子树。在B+树中,每个节点的子树个数与该节点的关键字个数相同,叶子节点包含的关键字的个数大于等于子树个数的二分之一。叶子节点用于存储节点的关键字及指向该关键字对应的表或记录的指针,或用于存储数据文件分块后每块数据文件的最大关键字及指向该最大关键字对应的表或记录的指针,叶子节点按关键字值的大小顺序进行链接,所有叶子节点都在一层。所有分支节点包括该分支节点的子节点中值最大关键字或值最小的关键字的分界值及指向该分界值的指针。如图2中,第二层中左边第一个节点包含关键字F及J,而F和J正是该节点的子节点中值最小的关键字的分界值。其中,节点包括根节点、分支节点及叶子节点,是根节点、分支节点及叶子节点的总称。位于树顶端的节点为根节点;位于B+树最底端的,没有子节点的节点称为叶子节点;除了叶子节点和根节点外的节点称为分支节点。除此外,还可用双亲节点和子节点来说明节点间的关系,与节点相连的,位于该节点上一层的节点称为该节点的双亲节点;而与该节点相连的,位于该节点下一层的节点称为该节点的子节点。在本发明实施例中,通过B+树来实现实时数据库的索引,提供了一种既高效,又稳定的索引方法。既提高了实时数据库的稳定性,又提高了实时数据库的性能,使得用户能够更加快捷地访问实时数据库。实施例二 实施例二为本发明提供的根据实施例一创建的B+树索引查询关键字的方法,为了便于说明,仅示出了与本发明实施例相关的部分。在本发明实施例中,将所需查找的表或记录的关键字逐层与B+树中各个节点的所有关键字相比较,直到在叶子节点中查找到与所述所需查找的表或记录的关键字相同的关键字。下面举一个具体的实例来详细说明。假如所建立的B+树如图2所示,其中,表或记录的关键字用英文字母表示,叶子节点按关键字值的大小顺序进行链接。需要在这颗B+树中查找关键字G。则具体的查找方法如下首先,将关键字G与根节点中的关键字P相比较,得出G小于P,因此根据根节点中的指针,跳至第二层中包含了关键字F及J的节点。此时,关键字G再与关键字F及J比较,在得出G大于F小于J后,再沿着指针进入第三层的节点,在第三层的节点中查询到关键字G。并在包含关键字G的叶子节点中找到一个指向关键字G对应的表或记录的指针。在本发明实施例中,由于只有叶子节点用于存储节点的关键字及指向该关键字对应的表或记录的指针,因此在B+树中查询时,若非叶子节点包含的关键字等于需要查找的关键字,并不终止查询。而是继续向下查找,直到查到包含需要查找的关键字的叶子节点。实施例三实施例三为本发明提供的根据实施例一创建的B+树索引插入关键字的方法,为了便于说明,仅示出了与本发明实施例相关的部分。在本发明实施例中,由于叶子节点按关键字值的大小顺序进行链接,则将需插入的关键字根据其值的大小插入对应的叶子节点中。其中,有以下两点需注意其一,若需插入的关键字对应的叶子节点加上需插入的关键字后,它所包含的关键字的个数小于等于该叶子节点阶数,则将该关键字直接插入对应的叶子节点中。其二,若需插入的关键字对应的叶子节点加上需插入的关键字后,它所包含的关键字的个数大于该叶子节点阶数,则需分裂该叶子节点。具体分裂方法为将需插入的关键字对应的叶子节点分裂为两个节点,这两个节点所包含的关键字的个数分别为(m+l)/2向下取整后所得的整数,(m+l)/2向上取整后所得的整数。其中,m 为节点阶数。此时,再判断该叶子节点的双亲节点是否满足该双亲节点包含的关键字个数小于等于该双亲节点阶数,若满足,结束插入流程;若不满足,则继续按上述方法分裂该双亲节点,直到所有节点都满足节点包含的关键字个数小于等于该节点阶数。下面对比图3及图4来说明插入关键字E的过程。若按照图3所示,直接将E插入左边第一个叶子节点,则造成该叶子节点不满足节点包含的关键字个数小于等于该节点阶数,引起错误。因此,要按照图4所示的方法,分裂E所在的叶子节点,使得E所在叶子节点分为两个节点,一个包含关键字A和B,另一个包含关键字C、D及E,使得这两个叶子节点都满足节点包含的关键字个数小于等于该节点阶数。实施例四实施例四为本发明提供的根据实施例一创建的B+树索引删除关键字的方法,为了便于说明,仅示出了与本发明实施例相关的部分。在本发明实施例中,首先查找到需删除的关键字所在的节点,然后将该关键字删除。具体有两种情况其一,查询到需删除的关键字所在的节点后,若该节点中的关键字个数大于该节点阶数的二分之一,则直接删除该关键字及与指向该关键字对应的表或记录的指针。其二,查询到需删除的关键字所在的节点后,若该节点中的关键字个数等于该节点阶数的二分之一,则从该节点的兄弟节点中移一个或多个关键字到该节点中,使该节点与其兄弟节点中所含的关键字个数基本相同。具体为,若该节点中的关键字个数等于该节点阶数的二分之一,删除关键字后,可能导致该节点中的关键字个数小于该节点阶数的二分之一,因此,此时需从该节点的兄弟节点中移一个或多个关键字到该节点中,使该节点与其兄弟节点中所含的关键字个数基本相同。然而,若该兄弟节点所包含的关键字个数等于节点阶数的二分之一,则不能移动该兄弟节点中的关键字,而是将该节点与它的兄弟节点或双亲节点中的一个关键字合并为一个节点。下面通过图5及图6来说明删除关键字G的过程。如图5所示,首先从包含关键点G的叶子节点中删除关键点G。然而由于G所在节点原有两个关键字(即在删除关键字 G之前),该节点关键字的个数等于节点阶数的二分之一。因此,在删除关键字G后,必须将该节点的兄弟节点中的一个或多个关键字加入该节点中。但是由于其兄弟节点所包含的关键字个数也等于节点阶数的二分之一,因此,合并该节点与其兄弟节点,即将关键字F、J、K 合在一个节点中(如图6所示)。此时,由于合成节点后,该合成后的节点的双亲节点中关键字J已经不是该双亲节点的子节点中值最小的关键字的分界值,因此还需从该双亲节点中删除关键字J。实施例五图7为本发明实施例提供的实时数据库的B+树索引装置结构示意图,为了便于说明,仅示出了与本发明实施例相关的部份。该装置可以是内置于电脑等电子设备的软件单元、硬件单元或者软硬件相结合的单元,或者作为独立的挂件集成到这些电子设备或电子的应用系统中。其中节点个数获取单元71,用于根据实时数据库中表或记录的个数,获得节点个数,所述节点包括节点域和控制域。内存划分单元72,用于根据每个节点所需占用的内存空间,划分对应的内存空间用于存储每个节点的节点域和控制域。索引生成单元73,用于将表或记录的关键字存储至节点的节点域,将指针信息存储至节点的控制域,以此生成各节点及B+树索引。
在本发明实施例中,生成的B+树中每个节点的子树个数小于等于B+树的阶数,所述B+树每个分支所包括的子树个数大于等于B+树的阶数,所述B+树中除叶子节点外,其他节点至少有两颗子树。在B+树中,每个节点的子树个数与该节点的关键字个数相同,叶子节点包含的关键字的个数大于等于所述子树个数的二分之一。叶子节点用于存储节点的关键字及指向该关键字对应的表或记录的指针,或用于存储数据文件分块后每块数据文件的最大关键字及指向该最大关键字对应的表或记录的指针,叶子节点按关键字值的大小顺序进行链接,所有叶子节点都在一层。所有分支节点包括该分支节点的子节点中值最大关键字或值最小的关键字的分界值及指向该分界值的指针。优选的,所述实时数据库的B+树索引装置还包括查询单元,用于将所需查找的表或记录的关键字逐层与B+树中各个节点的所有关键字相比较,直到在叶子节点中查找到与所述所需查找的表或记录的关键字相同的关键字。插入单元,用于将需插入的关键字根据其值的大小插入对应的叶子节点中;若需插入的关键字对应的叶子节点加上需插入的关键字后,所包含的关键字的个数小于等于该叶子节点阶数,则将需插入的关键字直接插入对应的叶子节点中;若需插入的关键字对应的叶子节点加上需插入的关键字后,所包含的关键字的个数大于该叶子节点阶数,则分裂该叶子节点。删除单元,用于查询到需删除的关键字所在的节点后,若该节点中的关键字个数大于该节点阶数的二分之一,则直接删除该关键字及与指向该关键字对应的表或记录的指针;若该节点中的关键字个数等于该节点阶数的二分之一,则从该节点的兄弟节点中移一个或多个关键字到该节点中,使该节点与其兄弟节点中所含的关键字个数基本相同。在本发明实施例中,通过B+树来实现实时数据库的索引,提供了一种既高效,又稳定的索引方法。既提高了实时数据库的稳定性,又提高了实时数据库的性能,使得用户能够更加快捷地访问实时数据库。本领域普通技术人员可以理解,实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以在存储于一计算机可读取存储介质中,所述的存储介质,如ROM/RAM、磁盘、光盘等。以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种实时数据库的B+树索引方法,其特征在于,所述方法包括根据实时数据库中表或记录的个数,获得节点个数,所述节点包括节点域和控制域;根据每个节点所需占用的内存空间,划分对应的内存空间用于存储每个节点的节点域和控制域;将表或记录的关键字存储至节点的节点域,将指针信息存储至节点的控制域,以此生成各节点及B+树索引。
2.如权利要求1所述的方法,其特征在于,在所述B+树中,节点的子树个数与节点的关键字个数相同,叶子节点包含的关键字的个数大于等于所述子树个数的二分之一;叶子节点用于存储关键字及指向该关键字对应的表或记录的指针,叶子节点按关键字值的大小顺序进行链接;所有分支节点包括该分支节点的子节点中值最大关键字或值最小的关键字的分界值及指向该分界值的指针。
3.如权利要求1或2所述的方法,其特征在于,利用所述B+树索引查找表或记录的方法为将所需查找的表或记录的关键字逐层与B+树各个节点的关键字相比较,直到在叶子节点中查找到与所述所需查找的表或记录的关键字相同的关键字。
4.如权利要求1或2所述的方法,其特征在于,利用所述B+树索引插入表或记录的方法为将需插入的关键字根据其值的大小插入对应的叶子节点中;若需插入的关键字对应的叶子节点加上需插入的关键字后,所包含的关键字的个数小于等于该叶子节点阶数,则将需插入的关键字直接插入对应的叶子节点中;若需插入的关键字对应的叶子节点加上需插入的关键字后,所包含的关键字的个数大于该叶子节点阶数,则分裂该叶子节点。
5.如权利要求1或2所述的方法,其特征在于,利用所述B+树索引删除表或记录的方法为查询到需删除的关键字所在的节点后,若该节点中的关键字个数大于该节点阶数的二分之一,则直接删除该关键字及与指向该关键字对应的表或记录的指针;查询到需删除的关键字所在的节点后,若该节点中的关键字个数等于该节点阶数的二分之一,则从该节点的兄弟节点中移一个或多个关键字到该节点中,使该节点与其兄弟节点中所含的关键字个数基本相同。
6.一种实时数据库的B+树索引装置,其特征在于,所述装置包括节点个数获取单元,用于根据实时数据库中表或记录的个数,获得节点个数,所述节点包括节点域和控制域;内存划分单元,用于根据每个节点所需占用的内存空间,划分对应的内存空间用于存储每个节点的节点域和控制域;索引生成单元,用于将表或记录的关键字存储至节点的节点域,将指针信息存储至节点的控制域,以此生成各节点及B+树索引。
7.如权利要求6所述的装置,其特征在于,在所述B+树中,节点的子树个数与节点的关键字个数相同,叶子节点包含的关键字的个数大于等于所述子树个数的二分之一;叶子节点用于存储关键字及指向该关键字对应的表或记录的指针,叶子节点按关键字值的大小顺序进行链接;所有分支节点包括该分支节点的子节点中值最大关键字或值最小的关键字的分界值及指向该分界值的指针。
8.如权利要求6或7所述的装置,其特征在于,所述装置还包括查询单元,用于将所需查找的表或记录的关键字逐层与B+树各个节点的关键字相比较,直到在叶子节点中查找到与所述所需查找的表或记录的关键字相同的关键字。
9.如权利要求6或7所述的装置,其特征在于,所述装置还包括插入单元,用于将需插入的关键字根据其值的大小插入对应的叶子节点中;若需插入的关键字对应的叶子节点加上需插入的关键字后,所包含的关键字的个数小于等于该叶子节点阶数,则将需插入的关键字直接插入对应的叶子节点中;若需插入的关键字对应的叶子节点加上需插入的关键字后,所包含的关键字的个数大于该叶子节点阶数,则分裂该叶子节点。
10.如权利要求6或7所述的装置,其特征在于,所述装置还包括删除单元,用于查询到需删除的关键字所在的节点后,若该节点中的关键字个数大于该节点阶数的二分之一,则直接删除该关键字及与指向该关键字对应的表或记录的指针; 查询到需删除的关键字所在的节点后,若该节点中的关键字个数等于该节点阶数的二分之一,则从该节点的兄弟节点中移一个或多个关键字到该节点中,使该节点与其兄弟节点中所含的关键字个数基本相同。
全文摘要
本发明适用于数据处理领域,提供了一种实时数据库的B+树索引方法及装置,所述方法包括根据实时数据库中表或记录的个数,获得节点个数,所述节点包括节点域和控制域;根据每个节点所需占用的内存空间,划分对应的内存空间用于存储每个节点的节点域和控制域;将表或记录的关键字存储至节点的节点域,将指针信息存储至节点的控制域,以此生成各节点及B+树索引。提供了一种既高效,又稳定的索引方法。既提高了实时数据库的稳定性,又提高了实时数据库的性能,使得用户能够更加快捷地访问实时数据库。
文档编号G06F17/30GK102402602SQ20111036759
公开日2012年4月4日 申请日期2011年11月18日 优先权日2011年11月18日
发明者丁明伟 申请人:航天科工深圳(集团)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1