B树和B+树
当数据量大时,我们如果用二叉树来存储的会导致树的高度太高,从而造成磁盘IO过于频繁,进而导致查询效率下降。因此采用B树来解决大数据存储的问题,很多数据库中都是采用B树或者B+树来进行存储的。其目的就是减少磁盘IO,提高查询效率。
B树特性
B树中每个节点可以有多个关键字,并且每个节点可以有多个孩子。具体特性如下:
- B树中所有节点的孩子节点数的最大值称为B树的阶,记为M
- 树中的每个节点至多有M棵子树
- 若根节点不是终端节点,则至少有两棵子树
- 除根节点外所有非叶节点至少有m/2棵子树
- 所有非叶节点结构如下
| n | P0 | K1 | P1 | K2 | P2 | … | Kn | Pn |
其中,n为节点中关键字的个数,Ki(i=1,2,3…n)为节点的关键字,且满足K1<K2<…<Kn;Pi(i=0,1,…,n)为指向子节点的指针,且Pi-1指向的节点中所有的关键字都小于Ki,Pi指向的节点中所有的关键字都要小于Ki。比如:P1指向的节点中所有的关键字都要小于大于K1且小于K2
- 所有的叶节点需要出现在同一层次上
- 树中所有节点的平衡因子都等于0

三阶B树
B树的查找
在B树上进行查找和二叉树的查找很相似,二叉树是每个节点上有一个关键子和两个分支。B树上每个节点有K个关键字和K+1个分支。二叉树的查找只考虑向左还是向右走,而B树中需要由多个分支决定。
B树的查找分两步,首先查找节点,由于B树通常是在磁盘上存储的所以这步需要进行磁盘IO操作。第二步是查找关键字,当找到某个节点后将该节点读入内存中然后通过顺序或者折半查找来查找关键字。若没有找到关键字,则需要判断大小来找到合适的分支继续查找。
B树的插入
B树的插入过程比较复杂,具体分为以下几个步骤:
- 定位:利用B树的查找算法,找出插入该关键字的最底层的某个叶子节点。
- 插入:找到欲插入的节点后,先进行插入操作。然后进行判断,如果当前节点中关键子的数量小于等于M-1(M为树的阶),则表示插入成功。否侧对节点进行分列处理
- 分裂方法:创建一个新节点,将插入KEY后的原节点从中间位置将其中的关键字分为两部分,左边的一部分保留在原节点中,右部分包含的关键字放到新的节点中,中间位置(m/2取上限)的节点插入到原节点的父节点中去。若此时导致其父节点的关键字个数也超过了上限,则继续进行这种分裂操作,直到这个过程传到根节点为止。
下面是一个三阶B树的插入过程。

当插入一个关键字60后,节点内的关键字个数超过出了m-1=2,此时必须进行节点分裂,分裂的过程如上图所示。
B树和B+树的更多相关文章
- wpf 逻辑树与可视化树
XAML天生就是用来呈现用户界面的,这是由于它具有层次化的特性.在WPF中,用户界面由一个对象树构建而成,这棵树叫作逻辑树.逻辑树的概念很直观,但是为什么要关注它呢?因为几乎WPF的每一方面(属性.事 ...
- 浅谈算法和数据结构: 十 平衡查找树之B树
前面讲解了平衡查找树中的2-3树以及其实现红黑树.2-3树种,一个节点最多有2个key,而红黑树则使用染色的方式来标识这两个key. 维基百科对B树的定义为“在计算机科学中,B树(B-tree)是一种 ...
- B树、B+树的实现
B树的定义 假设B树的度为t(t>=2),则B树满足如下要求:(参考算法导论) (1) 每个非根节点至少包含t-1个关键字,t个指向子节点的指针:至多包含2t-1个关键字,2t个指向子女的指针 ...
- B树、B-树、B+树、B*树
B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right) 2.所有结点存储一个关键字 3.非叶子节点的左指针指向小于其关键字的字数,右指针指向大于其关键字的字数: 如: B树的 ...
- 人人都是 DBA(VII)B 树和 B+ 树
B 树(B-Tree)是为磁盘等辅助存取设备设计的一种平衡查找树,它实现了以 O(log n) 时间复杂度执行查找.顺序读取.插入和删除操作.由于 B 树和 B 树的变种在降低磁盘 I/O 操作次数方 ...
- 字典树(Trie树)
1. trie基础 (1) 是什么? Trie,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种. (2) 性质 根节点不包含字符,除根节点外每一个节点都只包含一个字符 从根节点到某一节点,路 ...
- (转)B-树、B+树、B*树
B-树 是一种多路搜索树(并不是二叉的): 1.定义任意非叶子结点最多只有M个儿子:且M>2: 2.根结点的儿子数为[2, M]: 3.除根结点以外的非叶子结点的儿子数为[M/2, M]: 4. ...
- 从B 树、B+ 树、B* 树谈到R 树
从B 树.B+ 树.B* 树谈到R 树 作者:July.weedge.Frankie.编程艺术室出品. 说明:本文从B树开始谈起,然后论述B+树.B*树,最后谈到R 树.其中B树.B+树及B*树部分由 ...
- 转 浅谈算法和数据结构: 十 平衡查找树之B树
前面讲解了平衡查找树中的2-3树以及其实现红黑树.2-3树种,一个节点最多有2个key,而红黑树则使用染色的方式来标识这两个key. 维基百科对B树的定义为"在计算机科学中,B树(B-tre ...
随机推荐
- Jquery 的遍历,祖先、后代、同胞以及其过滤
什么是遍历? jQuery 遍历,意为“移动”,用于根据其相对于其他元素的关系来“查找”(或选取)HTML 元素.以某项选择开始,并沿着这个选择移动,直到抵达您期望的元素为止. 下图展示了一个家族树. ...
- 在DigitalOcean云主机上搭建SVN服务器
最近买了个DigitalOcean主机,顺便搭建个PPTP SVN服务器. 下面是搭建方法: https://www.digitalocean.com/community/tutorials/how- ...
- Hadoop Kernel tunning
/etc/security/limits.conf @ochadoop soft nofile 102642 @ochadoop hard nofile 102642 @ochadoop soft n ...
- 以后上午就只能这样了么-jQuery
hi 昨天睡得不错 为什么早上还是看不进论文,宁愿做这个,也不愿认真看论文.感觉上还是下午看论文感觉要好的多.不过最近有三十多篇要看哇...管球... 1.jQuery -----jQuery常用插件 ...
- 【原】一张图片优化5K的带宽成本
上周,我参加了公司的一门课程<网站性能优化>,讲师提出了一个问题:一张图片优化后减少5K,1年内可以大概省下多少宽带成本呢?非常好奇,仔细听完讲师分析,计算出来的数据让小伙伴们都惊呆了,仅 ...
- 初探网络编程--TCP套接字编程演示
今天看了一下<计算机网络:自顶向下方法>,也就是计算机网络的教材的应用层一章,决定实现以下后面的Java C/S应用程序的例子,用来演示TCP和UDP套接字编程. 程序流程如下: 1.一台 ...
- NOIP2006金明的预算方案[DP 有依赖的背包问题]
题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就行”.今 ...
- AC日记——接龙游戏 codevs 1051
1051 接龙游戏 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 给出了N个单词,已经按长度排好了序.如果 ...
- 扩展Unity的方法
写更少代码的需求 当我们重复写一些繁杂的代码,或C#的一些方法,我们就想能不能有更便捷的方法呢?当然在unity中,我们对它进行扩展. 对unity的类或C#的类进行扩展有以下两点要注意: 1.这个类 ...
- ES5特性之Object.freeze
Object.freeze方法比Object.seal方法更严格,不仅不能扩展新对象和不可重新配置属性的特性,还不能改变对象属性的值writable(不可写)