zoukankan      html  css  js  c++  java
  • 数据结构(十一)B树

    之前的二叉排序树,平衡二叉树都是基于二叉树的实现,但是在搜索过程中,效率和树的深度有关,所以就想到把二叉树改为多叉树,B树和B+树都基于多叉树的实现

    多路查找树

    B树

    定义

     

    应用场景

     

    B+树

    涉及到遍历的场景,B树就有明显缺陷了,需要类似树的中序遍历,而这样的IO开销是很大的,从而就引出了B+树

    定义

    也就是说,真正的数据存在叶子结点,其它结点存放的都是叶子结点的索引
    随机查询则从根结点开始遍历,顺序查询则可以从最左侧的叶子结点遍历
     

    应用场景

     

    数据库数据结构

    大多数数据库,如mysql,底层的数据结构也是采用B+树来实现
    1.树的深度会很大影响搜索效率,每多一层,就多一次IO,所以一般而言树深度越小越好,而B树/B+树支持多阶,符合要求
    2.数据量大了,就会出现索引,索引多了也会占据存储空间,B+树只在叶子结点存储真实数据,其它结点存储索引,可以提高索引结点的空间利用率
    3.结合磁盘特点,磁盘寻找数据需要经历三个时间,寻道时间旋转时间传送时间,而其中寻道时间消耗的时间最长。磁盘读取数据是以盘块(block)为基本单位的。位于同一盘块中的所有数据都能被一次性全部读取出来。而磁盘IO代价主要花费在查找时间Ts上。因此我们应该尽量将相关信息存放在同一盘块,同一磁道中。或者至少放在同一柱面或相邻柱面上,以求在读/写信息时尽量减少磁头来回移动的次数。所以一般数据库中的B+树采用与盘块大小相同的阶数。
     
    盘块:也就是扇区,一般是连续的512字节
    寻道时间:磁头找到对应的磁道
    旋转时间:在磁道上通过旋转找到对应的数据
    传送时间:通过计算机总线加载到内存
     

    参考资料

    从磁盘的使用角度来说明数据结构的应用场景
    //B+树和在数据库innodb的应用
  • 相关阅读:
    一本通1281:最长上升子序列 暨 LIS DP求解
    STL初步
    【洛谷P3369】【模板】普通平衡树
    【洛谷P4859】已经没有什么好害怕的了
    【CF961G】Partitions
    【洛谷P4718】【模板】Pollard-Rho算法
    【LOJ#143】质数判定
    【CF917D】Stranger Trees
    【洛谷P3700】小Q的表格
    【洛谷P4245】【模板】任意模数多项式乘法
  • 原文地址:https://www.cnblogs.com/ulysses-you/p/7153717.html
Copyright © 2011-2022 走看看