CN101286160B - 数据库索引的方法 - Google Patents
数据库索引的方法 Download PDFInfo
- Publication number
- CN101286160B CN101286160B CN2008100383696A CN200810038369A CN101286160B CN 101286160 B CN101286160 B CN 101286160B CN 2008100383696 A CN2008100383696 A CN 2008100383696A CN 200810038369 A CN200810038369 A CN 200810038369A CN 101286160 B CN101286160 B CN 101286160B
- Authority
- CN
- China
- Prior art keywords
- node
- index
- key assignments
- tree
- upgrade
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明揭示了一种数据库索引的方法,该方法包括如下步骤:步骤A、根据索引数据库建立一B+树;步骤B、定义步骤A中的B+树的数据结构,将重复的键值存储于B+树的叶节点中;步骤C、执行索引操作,包括查询操作、插入操作、删除操作。本发明的利用B+树的数据库索引方法,由于将重复出现的键值直接存储在B+树的叶节点中,避免了使用溢出节点,所以当溢出节点相对于键值较大时,而数据表中又存在一定量的重复键值的情况下,本发明能够有效地避免空间的浪费,从而减少索引文件的大小,同时也拓宽了B+树的适用范围。由此优化了数据库索引方案。
Description
技术领域
本发明数据库索引技术领域,涉及一种数据库索引方法,尤其涉及一种利用B+树的数据库索引方法。
背景技术
B树由R.Bayer和E.McCreight在1972年提出,可以看作是“二叉搜索树”在外存中多路扩展的一般形式,它被设计用来管理和维护大规模数据的索引,具有随机查询效率高、更新开销小和自平衡等特点。B+树在B树的基础上,进一步规定所有的“键值”只能出现在叶子节点中,并用链表的方式把所有叶子节点串连在一起,提高了顺序查询的效率。
研究B+树的算法时,为了简化一般都假设不存在键值重复的情况。现有处理处理重复键值的方法主要是采用“溢出页”,即当某个键值对应的记录数大于1时,分配一个“溢出页”用来存放所有的重复键值和其对应记录的偏移量。
这个方法尽管简单,但不可避免的浪费了溢出页中空闲的空间,尤其是当键值所占空间相对于溢出页容量较小时,空间浪费的程度加剧,整个索引文件对磁盘的需求量随之明显增加。
发明内容
本发明所要解决的技术问题是:提供一种利用B+树的数据库索引方法。
为解决上述技术问题,本发明采用如下技术方案:
一种数据库索引的方法,其特征在于,该方法包括如下步骤:
步骤A、根据索引数据库建立一B+树;
步骤B、定义步骤A中的B+树的数据结构,将重复的键值存储于B+树的叶节点中:
步骤C、执行索引操作,包括查询操作、插入操作、删除操作。
作为本发明的一种优选方案,所述步骤B包括:
步骤B1、重新定义B+树非叶节点的索引键值;
步骤B2、在每个非叶节点中新增一个索引键值。
作为本发明的一种优选方案,所述步骤B1中,将B+树非叶节点中的第i个索引键值定义为:以该非叶节点的第i+1个子节点为根的子树中,第一次出现的新键值;若新键值不存在,即该子树中包含的所有键值均相同,且已经出现在之前的子树中,则将该索引键值定义为“空”。
作为本发明的一种优选方案,所述步骤B2中,该新增的索引键值表示以某个非叶节点第0个子节点为根的子树中,第一次出现的新键值。
作为本发明的一种优选方案,所述查询操作中,在非叶节点中,确定下一步应该遍历的各子节点时,增加了对可能出现的“空”索引键值的处理。
作为本发明的一种优选方案,所述插入操作中,每次将新键值插入到相应的叶节点后,从该叶节点向上递归更新父节点的的索引键值,直至根节点。
作为本发明的一种优选方案,所述插入操作包括分裂过程,将一个节点分裂成两个节点后,在父节点中更新本节点索引键值并且增加对应新节点的索引键值,并可能需要递归向上更新,直至根节点。
作为本发明的一种优选方案,所述删除操作中,每次在某个叶节点中删除一个键值后,从该叶节点向上递归更新父节点的的索引键值,直至根节点。
作为本发明的一种优选方案,所述删除操作包括合并过程,合并两个节点后,需要在父节点中更新本节点索引键值并且删除被合并节点的索引键值,并可能需要递归向上更新,直至根节点。
本发明的有益效果在于:本发明的利用B+树的数据库索引方法,由于将重复出现的键值直接存储在B+树的叶节点中,避免了使用溢出节点,所以当溢出节点相对于键值较大时,而数据表中又存在一定量的重复键值的情况下,本发明能够有效地避免空间的浪费,从而减少索引文件的大小,同时也拓宽了B+树的适用范围。由此优化了数据库索引方案。
附图说明
图1为本发明数据库索引方法的流程图。
图2为本发明定义的B+树结构图。
图3-1、图3-2分别为实施例中B+树分裂过程前后的结构示意图。
图4为实施例中B+树删除操作的结构示意图。
具体实施方式
下面结合附图详细说明本发明的优选实施例。
请参阅图1,本发明揭示了一种数据库索引的方法,其特征在于,该方法包括如下步骤:
步骤A、根据索引数据库建立一B+树;
步骤B、定义步骤A中的B+树的数据结构,将重复的键值存储于B+树的叶节点中;包括:
步骤B1、重新定义B+树非叶节点的索引键值;将B+树非叶节点中的第i个索引键值定义为:以该非叶节点的第i+1个子节点为根的子树中,第一次出现的新键值;若新键值不存在,即该子树中包含的所有键值均相同,且已经出现在之前的子树中,则将该索引键值定义为“空”。
步骤B2、在每个非叶节点中新增一个索引键值。该新增的索引键值表示以某个非叶节点第0个子节点为根的子树中,第一次出现的新键值。
步骤C、执行索引操作,包括查询操作、插入操作、删除操作。
所述查询操作中,在非叶节点中,确定下一步应该遍历的各子节点时,增加了对可能出现的“空”索引键值的处理。
所述插入操作中,每次将新键值插入到相应的叶节点后,从该叶节点向上递归更新父节点的的索引键值,直至根节点。所述插入操作包括分裂过程,将一个节点分裂成两个节点后,在父节点中更新本节点索引键值并且增加对应新节点的索引键值,并可能需要递归向上更新,直至根节点。
所述删除操作中,每次在某个叶节点中删除一个键值后,从该叶节点向上递归更新父节点的的索引键值,直至根节点。所述删除操作包括合并过程,合并两个节点后,需要在父节点中更新本节点索引键值并且删除被合并节点的索引键值,并可能需要递归向上更新,直至根节点。
请参阅图2,其中揭示本发明中重新定义B+树结构的一棵树的实例。因为6号叶子节点中的所有键值9已经在之前的节点出现过,故第一次出现的新键值不存在,所以用“#”表示该索引值为“空”。另外,图中用下划线标注的数字表示每个非叶节点的额外索引键值,例如,因为第8号叶子节点中第一次出现的新键值为25,而它又是3号节点的第0个儿子节点,所以3号节点的额外索引键值为25。
本发明中B+树的插入算法总是从根节点开始,通过比较索引键值和待插入键值的大小来确定下一步应该遍历哪一个子节点,直至找到合适的叶节点来容纳待插入键值。在递归向下遍历的过程中,如果节点已满,即节点的(索引)键值数等于节点允许的最大值时,提前对其进行分裂操作,这样可以保证当下层节点进行分裂操作需要向上层父节点中添加一个新的索引键值时,父节点总是未满,即节点的索引键值数小于最大允许的键值数。此外,每当发生分裂操作和插入新键值后,都可能需要沿着查询路经递归向上更新父节点中的索引键值,以保证B+树数据结构的完整性。
图3-1、图3-2揭示一个在图2所示的B+树中插入键值29后,引起的第9号叶子节点的分裂和第3号节点索引值更新的例子。如图所示,待插入键值为29,从根节点递归向下最终找到合适的第9号叶节点以容纳新键值。此时由于第9号叶节点已满,需要将其分裂成本节叶节点和第10号新叶节点,然后在第10号叶节点中插入键值29。由于原先第9号节点中第一次出现的键值30现在由于分裂操作被移动到第10号节点中,所以应该将其父节点,即第3号节点中相应的索引键值从30更新为“空”,用“#”表示;同时,在父节点中还应该添加一个索引键值以表示新增叶节点中第一次出现的新键值,本例中为新插入键值29。
本发明的B+树删除算法类似插入算法,通过比较索引键值和待删除键值在大小来确定下一步应该遍历哪一个子节点,直至找到包含待删除键值的叶节点。在递归向下的遍历的过程中,如果节点的索引键值数已经等于规定的最小值时,提前将其与邻居节点合并(merge)或是从邻居节点中借出(borrow)索引值。这样可以保证当下层节点进行合并操作需要从上层父节点中删除一个索引键值时,父节点中的索引键值总是足够多,即节点的索引键值数大于规定的最小键值数。由于将重复的键值直接存储在B+树的叶节点中,遍历到的叶节点的左侧可能不是第一个包含待删除键值的节点,所以应该向左查找到第一个包含待删除键值的叶节点,同时应该对新查询路经上的节点重新进行“合并”或是“借出”的操作。此外,由于我们改变了B+树中索引值的定义,所以“合并”、“借出”和“删除”操作不只影响到待操作节点与其父节点两个节点中的索引值,为了保持整个B+树索引结构的完整性,父节点中索引值的变化可能需要更新查询路经向上每个节点的索引值。
如图4所示,为了删除键值21,从根节点开始递归向下找到一个包含键值21的节点leaf,此时向左查找到第一个包含键值21的叶节点leffMostLeaf,它们的共同父节点为commonParent。从图中可以看出,从共同父节点commonParent到leaf节点的路经上已经进行了“合并”或是“借出”的操作,而在commonParent节点到leftMostLeaf节点的路经上还没有,所以应该在此路经上重新按需要进行“合并”或是“借出”的操作。其中,左边路经上的节点还未进行过MERGE或BORROW操作;右边路径上的节点已经进行过MERGE或BORROW操作。
综上,本发明的利用B+树的数据库索引方法,由于将重复出现的键值直接存储在B+树的叶节点中,避免了使用溢出节点,所以当溢出节点相对于键值较大时,而数据表中又存在一定量的重复键值的情况下,本发明能够有效地避免空间的浪费,从而减少索引文件的大小,同时也拓宽了B+树的适用范围。由此优化了数据库索引方案。
以上实施例仅用以说明而非限制本发明的技术方案。不脱离本发明精神和范围的任何修改或局部替换,均应涵盖在本发明的权利要求范围当中。
Claims (6)
1.一种数据库索引的方法,其特征在于,该方法包括如下步骤:
步骤A、根据索引数据库建立一B+树;
步骤B、定义步骤A中的B+树的数据结构,将重复的键值存储于B+树的叶节点中;
步骤C、执行索引操作,包括查询操作、插入操作、删除操作;
所述步骤B包括:
步骤B1、重新定义B+树非叶节点的索引键值;其中,将B+树非叶节点中的第i个索引键值定义为:以该非叶节点的第i+1个子节点为根的子树中,第一次出现的新键值;若新键值不存在,即该子树中包含的所有键值均相同,且已经出现在之前的子树中,则将该索引键值定义为“空”;
步骤B2、在每个非叶节点中新增一个索引键值;其中,该新增的索引键值表示 以某个非叶节点第0个子节点为根的子树中,第一次出现的新键值。
2.根据权利要求1所述的数据库索引的方法,其特征在于:所述查询操作中,在非叶节点中,确定下一步应该遍历的各子节点时,增加了对可能出现的“空”索引键值的处理,处理包括插入、删除和查询操作。
3.根据权利要求1所述的数据库索引的方法,其特征在于:所述插入操作中,每次将新键值插入到相应的叶节点后,从该叶节点向上递归更新父节点的的索引键值,直至根节点。
4.根据权利要求1所述的数据库索引的方法,其特征在于:所述插入操作包括分裂过程,将一个节点分裂成两个节点后,在父节点中更新本节点索引键值并且增加对应新节点的索引键值,并可能需要递归向上更新,直至根节点。
5.根据权利要求1所述的数据库索引的方法,其特征在于:所述删除操作中,每次在某个叶节点中删除一个键值后,从该叶节点向上递归更新父节点的的索引键值,直至根节点。
6.根据权利要求1所述的数据库索引的方法,其特征在于:所述删除操作包括合并过程,合并两个节点后,需要在父节点中更新本节点索引键值并且删除被合并节点的索引键值,并可能需要递归向上更新,直至根节点。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008100383696A CN101286160B (zh) | 2008-05-30 | 2008-05-30 | 数据库索引的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008100383696A CN101286160B (zh) | 2008-05-30 | 2008-05-30 | 数据库索引的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101286160A CN101286160A (zh) | 2008-10-15 |
CN101286160B true CN101286160B (zh) | 2010-09-22 |
Family
ID=40058371
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2008100383696A Expired - Fee Related CN101286160B (zh) | 2008-05-30 | 2008-05-30 | 数据库索引的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101286160B (zh) |
Families Citing this family (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101382949B (zh) * | 2008-10-28 | 2011-09-07 | 阿里巴巴集团控股有限公司 | 一种数据库表的管理方法及装置 |
CN101763415B (zh) * | 2009-12-16 | 2012-10-17 | 北京握奇数据系统有限公司 | 一种数据库的b树索引的生成方法及装置 |
CN102117305B (zh) * | 2010-01-06 | 2013-09-11 | 中国移动通信集团公司 | 查询数据的系统、方法和数据管理系统 |
US10452629B2 (en) | 2010-07-13 | 2019-10-22 | International Business Machines Corporation | Automatic maintenance of a set of indexes with different currency characteristics in a database management system |
US8954407B2 (en) | 2010-07-13 | 2015-02-10 | International Business Machines Corporation | System and method for partially deferred index maintenance |
CN101957864A (zh) * | 2010-10-21 | 2011-01-26 | 同方知网(北京)技术有限公司 | 应用于抄袭检测的信息指纹索引方法 |
CN102402602A (zh) * | 2011-11-18 | 2012-04-04 | 航天科工深圳(集团)有限公司 | 一种实时数据库的b+树索引方法及装置 |
CN102955843B (zh) * | 2012-09-20 | 2015-07-22 | 北大方正集团有限公司 | 一种键值数据库的多键查找实现方法 |
US9177026B2 (en) * | 2012-09-27 | 2015-11-03 | LogicBlox, Inc. | Leapfrog tree-join |
CN103116652B (zh) * | 2013-03-06 | 2016-03-16 | 同方知网(北京)技术有限公司 | 一种基于拉链信息的索引存储管理方法 |
CN103559272A (zh) * | 2013-11-05 | 2014-02-05 | 北京国双科技有限公司 | 向维度表里导入数据的方法和装置 |
CN105159915B (zh) * | 2015-07-16 | 2018-07-10 | 中国科学院计算技术研究所 | 可动态适应的lsm树合并方法及系统 |
CN106709005B (zh) * | 2016-12-23 | 2020-11-24 | 北京奇虎科技有限公司 | 一种处理数据库系统中的冗余索引的方法、装置和系统 |
CN109388636A (zh) * | 2017-08-11 | 2019-02-26 | 中国移动通信集团重庆有限公司 | 业务数据插入数据库方法、装置、计算机设备及存储介质 |
CN108446376B (zh) * | 2018-03-16 | 2022-04-08 | 众安信息技术服务有限公司 | 数据存储方法与装置 |
CN108924215B (zh) * | 2018-06-28 | 2021-03-19 | 北京顺丰同城科技有限公司 | 一种基于树形结构的服务发现处理方法及装置 |
CN108984780B (zh) * | 2018-07-25 | 2021-10-22 | 郑州云海信息技术有限公司 | 基于支持重复键值树数据结构管理磁盘数据的方法和装置 |
CN109992584B (zh) * | 2019-03-26 | 2023-09-22 | 吕新民 | 一种借鉴围棋布局的数据结构树的存储方法 |
CN110489601B (zh) * | 2019-07-18 | 2022-09-16 | 国电南瑞科技股份有限公司 | 一种基于缓存机制的实时数据索引快速动态更新方法 |
CN110659286B (zh) * | 2019-09-05 | 2023-11-24 | 苏州大学 | 基于弱平衡空间树动态空间索引方法及其存储介质、装置 |
CN111488341B (zh) * | 2020-03-27 | 2023-08-22 | 北京金山云网络技术有限公司 | 数据库索引的管理方法、装置及电子设备 |
CN112579575A (zh) * | 2020-12-28 | 2021-03-30 | 超越科技股份有限公司 | 一种数据库索引结构的快速构建方法 |
CN112667637B (zh) * | 2020-12-31 | 2023-09-19 | 中移(杭州)信息技术有限公司 | 数据管理方法、装置及计算机可读存储介质 |
-
2008
- 2008-05-30 CN CN2008100383696A patent/CN101286160B/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
CN101286160A (zh) | 2008-10-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101286160B (zh) | 数据库索引的方法 | |
US20190278783A1 (en) | Compaction policy | |
US9501550B2 (en) | OLAP query processing method oriented to database and HADOOP hybrid platform | |
US10769124B2 (en) | Labeling versioned hierarchical data | |
CN103902544B (zh) | 一种数据处理方法及系统 | |
CN105117415A (zh) | 一种优化的ssd数据更新方法 | |
EP3575968A1 (en) | Method and device for synchronizing active transaction lists | |
CN104123288A (zh) | 一种数据查询方法及装置 | |
CN103473321A (zh) | 数据库管理方法与系统 | |
WO2013155752A1 (zh) | 面向数据库与Hadoop混合平台的OLAP查询处理方法 | |
CN103106198A (zh) | 树型结构实现方法和装置 | |
CN102291450A (zh) | 一种集群存储系统内部的数据在线分级存储方法 | |
CN104281617A (zh) | 一种基于领域知识的多层关联规则挖掘方法及系统 | |
Hadian et al. | Interpolation-friendly B-trees: Bridging the Gap Between Algorithmic and Learned Indexes. | |
CN104731925A (zh) | 基于MapReduce的FP-Growth的负载均衡并行计算方法 | |
CN106156301A (zh) | 一种大字段数据的处理方法及装置 | |
Challa et al. | DD-Rtree: A dynamic distributed data structure for efficient data distribution among cluster nodes for spatial data mining algorithms | |
CN108717448B (zh) | 一种面向键值对存储的范围查询过滤方法和键值对存储系统 | |
CN103345501A (zh) | 数据库更新方法和装置 | |
CN101277252A (zh) | 多分支Trie树的遍历方法 | |
CN105447105A (zh) | 基于NoSQL的分布式物联网数据的单字段区间索引查询方式 | |
CN114860727A (zh) | 拉链表更新方法及装置 | |
CN105653654A (zh) | 一种抽奖资格索引系统及方法 | |
CN112148830A (zh) | 一种基于最大区域网格的语义数据存储与检索的方法及装置 | |
CN114416884B (zh) | 连接分区表的方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20100922 Termination date: 20130530 |