B-树

作者: 水欣 | 来源:发表于2017-12-15 10:03 被阅读0次

一个m阶的B-树具有如下几个特征:

  1. 根节点至少有两个子女
  2. 每个中间节点都包含k-1个元素和k个孩子,其中m/2<=k<=m
  3. 每个叶子节点都包含k-1个元素,其中m/2<=k<=m
  4. 所有的叶子结点都位于同一层
  5. 每个节点中的元素从小到大排序,节点当中k-1个元素正好是K个汉子包含的元素的值域划分。

例:3阶的B-树


3.png

B-树查询的过程,假如我们要查询的数值是5
第一次磁盘IO:


4.png

在内存中定位(和9比较):


5.png
第二次磁盘IO
6.png
在内存中定位(和2、6比较):
7.png

第3次磁盘IO:


8.png
在内存中定位(和3、5比较)
9.png
通过整个流程我们可以看出,B-树在查询中的比较次数其实不比二叉查找树少,尤其当单一节点中的元素数量很多时。可是相比磁盘IO的速度,内存中比较耗时几乎可以忽略。所以只要树的高度足够低,IO次数足够少,就可以提升查找性能。相比之下节点内部元素多一些也没有关系,仅仅是多了几次内存交互,只要不超过磁盘页的大小即可。这就是B-树的优势之一。
插入节点

B-树插入新节点的过程比较复杂,而且分成很多种情况。例如插入值4
自顶向下查找4的节点位置,发现4应当插入到节点元素3,5之间


10.png

节点3,5已经是两元素节点,无法再增加。父亲节点2,6也是两元素节点,也无法再增加。根节点9是单元素节点,可以升级为两元素节点。于是拆分节点3,5与节点2,6,让根节点9升级为两元素节点4,9。节点6独立为根节点的第二个孩子。


1.png
B-树能够始终维持多路平衡,这也是B-树的一大优势:自平衡。
删除节点

比如删除元素11

自顶向下查找元素11的节点位置。 2.png
删除11后,节点12只有一个孩子,不符合B树规范。因此找出11,12,15三个节点的中位数13,取代节点12,而节点12自身下移成为第一个孩子(这个过程称为左旋)
3.png
4.png

B-树主要应用于文件系统以及部分数据库索引,比如著名的非关系型数据库MongoDB.
而大部分关系型数据库,比如Mysql,则使用B+树作为索引。

相关文章

  • B+树和B树的区别

    B-树 B-树概述 B-树,这里的 B 表示 balance( 平衡的意思),B-树是一种多路自平衡的搜索树(B树...

  • B-/B+树看 MySQL索引结构

    B-树 B-树,这里的 B 表示 balance( 平衡的意思),B-树是一种多路自平衡的搜索树。它类似普通的平衡...

  • B树、B+树、B*树

    B-树 B+树 B*树

  • B树、B+树、B*树

    B-树,就是B树,B树的原英文名是B-tree,所以很多翻译为B-树,就会很多人误以为B-树是一种树、B树是另外一...

  • 转:B树

    1、B-树(B树)的基本概念 B-树中所有结点中孩子结点个数的最大值成为B-树的阶,通常用m表示,从查找效率考虑,...

  • 对B+树,B树,红黑树的理解

    写在前面,好像不同的教材对b树,b-树的定义不一样。我就不纠结这个到底是叫b-树还是b-树了。 如图所示,区别有以...

  • 添加B-树索引为啥查询就会快

    数据库添加B-树索引,查询就快。那么为啥添加索引就快 B-树索引的内部结构如下: 理解下图就明白了 B-树索引有两...

  • B-树/B+树

    B-树(Balance树)和B+树应用与数据库索引,是m叉的多路平衡查找树。 1. 性质分析 1.1 M阶B-树 ...

  • 1.B-树的相关问题

    1. B-树的阶,是什么意思? 举个例子:5阶的B-树, 阶数 m = 5 指的是: ...

  • B-树

    为什么需要B-树 当所有数据都存储在内存中时,用红黑树的查找性能已经非常的好了。但是当数据量非常的大的时候,把数据...

网友评论

      本文标题:B-树

      本文链接:https://www.haomeiwen.com/subject/nhkiixtx.html