【数据结构】--B树和B+树

说明:由于mysql的InnoDB搜索引擎使用B+树结构存储数据,由此了解基本的B+树知识,以便了解一些技术的原理。

要了解B+树,首先要了解下B树/B-树的思想。

一、B树

1、概念

B树是一种自平衡树数据结构,它维护有序数据并允许以对数时间进行搜索,顺序访问,插入和删除。B树是二叉搜索树的一般化,因为节点可以有两个以上的子节点。与其他自平衡二进制搜索树不同,B树非常适合读取和写入相对较大的数据块(如光盘)的存储系统。它通常用于数据库和文件系统。

m阶的B树,它必须满足如下条件:

每个节点最多只有m个子节点。
每个非叶子节点(除了根)具有至少⌈ m/2⌉子节点。
如果根不是叶节点,则根至少有两个子节点。
具有k个子节点的非叶节点包含k -1个键。
所有叶子都出现在同一水平,没有任何信息(高度一致)。

关键点是:
2<=根节点子节点个数<=m
m-2<=内节点子节点个数<=m
1<=根节点元素个数<=m-1
2<=非根节点元素个数<=m-1

【数据结构】--B树和B+树_第1张图片
对于上面,【13,16,19】拥有4个子节点,最多,那么是4阶B树。
【13,16,19】、【3,6】是内部节点【除根节点和叶子节点外,其拥有父节点和子节点】。

2、生成B树

现在需要生成一个m阶高度h的B树
核心是:

若该节点元素个数< m-1,直接插入;
若该节点元素个数等于m-1,引起节点分裂;以该节点中间元素为分界,取中间元素(偶数个数,中间两个随机选取)插入到父节点中;
重复上面动作,直到所有节点符合B树的规则;最坏的情况一直分裂到根节点,生成新的根节点,高度增加1;

具体见下面的图解:
【数据结构】--B树和B+树_第2张图片
-----从上面插入发现,插入还是按照“二叉查找树”规则确定是插入左子树还是右子树,如果该节点的阶超过限制阈值,那么分裂调整。

二、B+树

B+树的思想和B树类似,但结合实际的是,只有叶子节点才最终有数据,其根节点和中间节点度是索引,便于搜索查找【结合具体B+树插入即可知道】。

1、生成B+树

见下面的图解:
【数据结构】--B树和B+树_第3张图片
----对于带data节点分裂时,需要将索引给其父节点【如18】;如果是索引节点分裂时,按照B+的思想分裂即可。

你可能感兴趣的:(数据结构)