数据结构(六):复杂树之B+B-树

 

一、 B-树概述

  B-树是在2-3树的基础上,一个结点允许多个键(>=3)存在的树状数据结构。

二、 B-树特性

  • B-树允许一个结点存在>=3个键
  • 一颗M阶的B-树,存在M-1层的树层级
  • 一颗M阶的B-树,每个结点最多有M-1个键,并且升序排列
  • 每个结点最多能有M个子结点
  • 根结点至少有两个子结点

  如下为一颗M=5阶的B-树示意图

   

  如下为一颗M=5阶的B-树存储数据的示意图

   

  插入13,21

   

  插入40

   

三、 B-树的应用场景

  计算机中文件是存储在磁盘上的,计算机通过操作文件系统对磁盘上的文件进行增删改操作,文件系统就是使用的B-树。

  由于存储介质特性,磁盘读取比主存要慢很多,为了减少磁盘I/O,磁盘不会按需读取,而是会有预读操作,即使只需要一个字节,磁盘也会从该位置开始,向后读取一定长度的数据放入主存

  这是根据计算机中的局部性原理:当一个数据被使用时,其附近的数据也通常会被马上使用。因此预读可以提高I/O效率。

  页是计算机存储的逻辑块,磁盘存储区被分割为大小相等的块,每个存储块为一页,通常是1024个字节或其整数倍,预读长度一般为页的整倍数。主存和磁盘以页为单位交换数据。

  当读取的数据不在主存中时,会触发缺页异常并向磁盘发出信号,磁盘会将数据读取的起始位置处往后的几页数据读取并载入内存中。

  为什么B-树更适用于文件系统读取,假设有10亿个数据,那么一个1024阶的B-树读完只需要三层,而二叉树需要20层,B-树对于大数据量的读取,优势还是非常明显的。

四、 B+树概述

  B+树是B-树的变形树,B+树中非叶子结点的父结点只存索引,不存具体数据。

五、 B+树和B-树区别和优劣

  区别:

  1、B+树中非叶子结点的父结点只存索引,不存具体数据

  2、B+树所有叶子结点构成一个有序链表,可在最左的叶子结点有序的往后遍历

  如图所示为B+树和B-树数据存储上的区别

   

  继续插入18

   

  优劣:

  B+树相比B-优点在于:B+树非叶子结点不存储数据,只存索引,因此内存空间复杂度小,又因为叶子结点组成了有序链表,对整棵树的遍历,只需一次性遍历叶子结点即可。

  B+树相比B-缺点在于:B-树每个结点都包含Key和Value,因此当我们遍历匹配到Key时就可以直接获取到值,而无需像B+树一样,需遍历到叶子结点才能获取到value。

六、 B+树的应用场景

  数据库主键索引查询:

  在如下的数据库表中,若要找到id=18的username,需要遍历6次

userid

username

7

cat

3

dog

10

monkey

12

rabbit

22

lion

18

tiger

8

fish

  而对这部分数据转化为B+树存储后,如下图,只需根据根结点索引,找到id=12的树节点并往后遍历1次即可,在性能上有很大的优化

   

posted @ 2020-11-29 15:50  纪煜楷  阅读(578)  评论(0编辑  收藏  举报