B树(B-树) B+树

B树(B-树) B+树

B树定义

对于一颗M阶B树具有以下性质
1.根节点的子节点数为[2,M]。
2.除根节点与叶节点外的节点子节点数数为[M/2,M]。
3.除根节点每个节点都存放数据个数为[M/2-1,M-1],升序存储。
4.非叶节点存储数据个数为指向子节点指针数-1.
5.所有的叶节点都在同一层。
在这里插入图片描述

B树的使用场景

在数据存储中,AVL树与红黑树的查询时间都是相对低,但在大量数据存储时,往往不能一次性把全部数据都加载到内存当中,因此io次数是查询时间复杂度的决定性因素。对于二叉树来说存储大量数据二叉树的高度会非常高,数据会散列存放在不同的数据块中,在查找时加载数据的io次数就会增加。胖矮的树更能减少io次数,而B树的子节点数多于2,是多阶数,也称多路查找树,能把尽可能多的把相近的数据存放到同一个数据块中,同时降低数的高度,减小查询时间,因此B数适合大数据量存储。mogodb是一种聚合行模型简单的高性能数据库,使用了B树数据结构,将key与数据聚合到一起。

B树新增节点只在叶节点增加,B树增加节点时从根节点查询新节点插入的位置,插入节点后如果不违反性质3,则不需要维护。如果违反性质3,节点数超过M,则需要对节点进行拆分,对半拆成两个节点数基本相同的节点,将中间节点上移到父节点,如果父节点违反性质3,递归维护B树,直到符合B树性质或根节点拆分,生成新的根节点,B树的高度增加。由此拆分过程可知B树是一棵自平衡的平衡多叉树。

以下是一棵5阶树节点新增过程
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
B树的节点删除则如果违反性质3,需要从父节点下移数据,递归维护直到重新满足B树的全部性质或根节点下移与子节点合并,成为新的根节点,B树的高度降低。

B+树
B+树与B树区别在于B+树不是将数据存储到每个节点中,只存放用于区分范围的key值,具体数据存放在叶节点中。同时在叶节点新增一条顺链连指针。

B+树相对B树的优势:
由于B+树非叶节点不存储数据,因此非叶节点体积很小,一个数据块可以容纳更多的非叶节点,因此极大减少了io次数,查询时间更短。同时由于添加了叶节点间的指针链,因此在范围查找时只需要找到起点节点按链表查询下去,提高了范围查找的时间复杂度。

B+树的使用场景:
关系型数据库索引一般使用B+树

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值