3.数据结构-B-tree

B-tree是什么

      B树(英语:B-tree)是一种自平衡的树,能够保持数据有序。这种数据结构能够让查找数据、顺序访问、插入数据及删除的动作,都在对数时间内完成。B树,概括来说是一个一般化的二叉查找树(binary search tree)一个节点可以拥有2个以上的子节点。与自平衡二叉查找树不同,B树适用于读写相对大的数据块的存储系统,例如磁盘。B树减少定位记录时所经历的中间过程,从而加快存取速度。B树这种数据结构可以用来描述外部存储。这种数据结构常被应用在数据库和文件系统的实现上。

    1.B-tree数据结构图

M = 3阶,(1,3)树 


B-tree定义

    一种多维度的,构建方式是从下而上的平衡树。

 

B-tree性质 

   前提:一个 m 阶的B树

     1.每一个节点最多有 m 个子节点

      2.每一个非叶子节点(除根节点)子节点数范围 ⌈m/2,m⌉ (ps:小数情况m/2的值向下取整)

      3.如果根节点不是叶子节点,那么它至少有两个子节点

      4.有 n个子节点的非叶子节点拥有 n− 1 个键 (ps:上图3阶树,共计2个数据关键词)

      5.所有的叶子节点都在同一层 (ps:既根节点到每个叶子节点的路径相等)

   PS:B-tree的阶是指B-tree节点的指针数目

B-tree特点

  1. B-tree是一种平衡树 [B-tree的自下而上的构建方式保证]
  2. 根节点至少有2个子节点
  3. 关键词数目等于n个子节点的数目减一,因为Btree的结构是2个子节点夹一个关键词
  4. B-tree关键词排序,从左到右升序排列

 

B-tree查找遍历

  假设查找关键词29,且使用先序遍历

  1. 比较关键字29在区间(17,35),找到Btree节点指针P2
  2. 比较关键字29在区间(26,30),找到Btree节点指针P2
  3. 根据P2指针找到磁盘块8,在磁盘块8中的关键字列表中找到关键字29

B-tree如何保证结构稳定平衡

     B树的构建方式是自下而上的构建方式,二叉树和红黑树是自上而下的构建方式,B树这种构建方式好处在于树结构稳定平衡性很强,不容易发生树平衡。以mysql为案例,其开启16k的页缓存,当索引字段大小为8字节,如果树高为3,其支撑最大的索引数目为2048*2048*2048+2048*2048+2048 > 85亿。

 

B-tree总结

  •   B-tree为什么使用多阶?

         多阶好处:

               多阶的好处是降低树的高度,在查询的时候很快定位到目标数,多阶的设计也符合现在磁盘系统读取数据的方式,现在磁盘系统取数据不是取的目标数据,磁盘取数据按照页大小取所需要的磁盘物理单元,具体流程参考我以前文章[IO流程简介] ,B-tree的结构就是一种多阶的红黑树,这种设计使得树的平衡性好,且时间复杂度比较高效O(n)=logmN。    

         多阶坏处:

              多阶坏处,实现难度大特别是B-tree的平衡部分。B-tree在平衡的时候可能整颗树都会导致再次平衡,如何做到高效的平衡?待研究

  •  B-tree的最佳遍历方案是先序遍历吗?

           先序遍历

                 时间复杂度O(n)=logmN       

           中序遍历

                 时间复杂度O(n)= 待公式待推导 

           后续遍历  

                 时间复杂度O(n)= 待公式待推导

           直观感受是,先序遍历充分利用了B-tree的特性 及hash定位的高效,比其他遍历方式更高效。

 

B-tree代码实现

       git实现地址【目前未实现,待更新】   

 

参考文档

      1.B-tree维基百科

      2.B-tree百度百科

      3.B-tree与B+tree详解

      4.mysql索引原理以及优化

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值