B树,B+树,及其区别

B树 

B树是一种树状数据结构,它能够存储数据、对其进行排序并允许以O(logn)的时间复杂度进行查找、顺序读取、插 入和删除等操作。

B树中允许一个结点中包含多个key,可以是3个、4个、5个甚至更多,并不确定,需要看具体的实现。现在我们选择一个参数M,来构造一个B树,我们可以把它称作是M阶的B树,那么该树会具有如下特点:

  • 每个结点最多有M-1个key,并且以升序排列;
  • 每个结点最多能有M个子结点;
  • 根结点至少有两个子结点;

例如M=4时B树的构造: 

B树在插入数据时是向上生长的:

B树在磁盘上的应用因为磁盘读取数据速度是远远小于主存的,所以通常在读取数据的时候不是严格按照要使用的数据范围来读取,会有一定冗余,也就是多读取出来一部数据备用。磁盘读取数据的时间分为寻道时间,旋转时间,以及传送时间。寻道时间占一大部分,旋转时间也就是顺序读取是很快的。而文件系统的设计者利用了磁盘预读原理,将一个结点的大小设为等于一个页(1024个字节或其整数倍),这样每个结点只需要一次I/O就可以完全载入。那么3层的B树可以容纳1024*1024*1024差不多10亿个数据,如果换成二叉查找树,则需要30层!假定操作系统一次读取一个节点,并且根节点保留在内存中,那么B树在10亿个数据中查 找目标值,只需要小于3次硬盘读取就可以找到目标值,但红黑树需要小于30次,因此B树大大提高了IO的操作效率。相当于每一层树就是一个磁盘轨道,B树利用磁盘旋转读取快且避开寻道慢的特点,从而提高数据读取效率。

 

B+树

B+树是对B树的一种变形树,它与B树的差异在于:

  1. 非叶结点仅具有索引作用,也就是说,非叶子结点只存储key,不存储value。
  2. 树的所有叶结点构成一个有序链表,可以按照key排序的次序遍历全部数据。

由上面的图可以看出,除了最后一层的叶结点,其它结点都没有存储数据,只存了索引值,并且是通过索引值大小来进行排序,每个索引值都把小于自己的索引分在左边,大于自己的分在右边。

 

B+树的优点:

  1. 由于B+树在非叶子结点上不包含真正的数据,只当做索引使用,因此在内存相同的情况下,能够存放更多的 key。
  2. B+树的叶子结点都是相连的,因此对整棵树的遍历只需要一次线性遍历叶子结点即可。而且由于数据顺序 排列并且相连,所以便于区间查找和搜索。而B树则需要进行每一层的递归遍历。

B树的优点:

由于B树的每一个节点都包含key和value,因此我们根据key查找value时,只需要找到key所在的位置,就能找到 value,但B+树只有叶子结点存储数据,索引每一次查找,都必须一次一次,一直找到树的最大深度处,也就是叶 子结点的深度,才能找到value。

 

B+树的特性决定了其搜寻效率之高,所以数据库中经常会使用到B+树索引,通过几次与根节点的比较,将搜寻范围控制在一个较小空间内,极大地提高了搜索效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值