• 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

  • 相关阅读:
    Memcache安全配置
    Iptables DDOS/CC 自动屏蔽脚本
    php浮点数精确运算
    Relearning PHP (2) – php 的浮点数float
    mybatis分页插件PageHelper的使用(转)
    深入理解mybatis参数
    @Param注解在mybatis中的使用以及传入参数的几种方式(转)
    idea常用快捷键大全(转)
    @ModelAttribute注解的作用
    参数绑定
  • 原文地址:https://www.cnblogs.com/dreamzj/p/14635328.html
Copyright © 2020-2023  润新知