B/B+树的初步理解(一)

一、为什么需要B树?

用二叉查找树在磁盘上存储数据会面临两个问题:

1、二叉树只有两个分支,数据量非常大的时候,树的高度会很大,不利于数据的查找

2、每次仅若读取一条信息,会造成大量空间的浪费

因此需要把树的高度降低,并且尽量是的每次磁盘读取都能够得到最多的信息

为解决这两个问题,B树应运而生

B树是一种多路平衡树,或者说是一种平衡多路查找树,用于处理磁盘读取问题,减少磁盘IO次数。

 

 B树构建过程:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

总结:

1、当根节点已满的时候,要先对根节点进行拆分

2、如果根节点没满,要先走到叶子节点,如果叶子节点没满,则进行插入,如果已满,需要对叶子结点进行拆分。

 二、有了B树为什么还需要B+树?

B+树是在B树的变种,它与B树的不同之处在于:

  1、在B+树中,key的副本存储在内部节点,真正的key和data存储在叶子节点中

  2、n个key值的节点指针域为n而不是n+1

三、B与B+树的区别:

1、B+树内节点不存储数据,所有data存储在叶子节点导致查询时见复杂度固定为logn,而B树查询时间复杂度不固定,与key在树中的位置有关,最好为O(1)

2、B+树叶子节点两两相连可大大增加区间访问性,可使用在范围查询等,而B树每个结点key和data在一起,则无法区间查找

3、B+树更适合外部存储,由于内节点无data域,每个节点能索引的范围更大更精确

4、在数据结构上,B树为有序数组+平衡多叉树,而B+树为有序数组链表+平衡多叉树

四、为什么MongoDB索引选择B树,而Mysql索引选择B+树?

MongoDB是一种nosql,也存储在磁盘上,被设计用在数据模型简单,性能要求高的场合。符合区别的第一条,MongoDB是聚合型数据可,而B树恰好key和data域聚合在一起

Mysql是一种关系型数据库,区间访问是常见的一种情况,而B树不支持区间访问,而B+树由于数据全部存储在叶子节点,并且通过指针串在一起,这样很容易的进行区间遍历甚至全部遍历。

参见:https://www.wiki-wiki.top/baike-B%2B%E6%A0%91

 

posted @ 2021-04-08 23:08  XA科研  阅读(190)  评论(0编辑  收藏  举报