B树 B+树 红黑树 内存 文件系统

B树出现的动机

1 内存越来越小: 即使内存的绝对容量在增加,但相对容量在减少;B树多用在内存里放不下,大部分数据存储在外存上时。因为B树层数少,因此可以确保每次操作,读取磁盘的次数尽可能的少。
2 存储容量的增长速度远远小于应用问题规模的速度;典型的数据集都已Tb为单位
3 高速缓存
4 磁盘和内存在访问速度 ms/ns = 10^6 天上方数日,人间已千年  CPU RAM Disk Array从高级别到低级别,访问速度依次降低
5 内存访问需要1s,而外存需要一天 
6 从内存到外存的读取数据:采取页面缓冲的方式,就像尽量一次大批量的采购粉笔

B树的结构与特点

1 平衡的多路搜索树:若干个二路节点经过合并组成 n个关键码 n+1路分支,相比平衡二叉树,更宽更矮

2 m阶B树:也就是M路B树,树高H =  外部节点的深度
3 所有的叶节点的深度统一;外部节点的深度统一相等(数值为空de叶节点)

4 m阶次的含义:每个超级节点规模的上限和下限(2,4)树红黑树,(3,6)树

5 m阶每个节点的分支树之多是m 至少树根是大于等于2;其他节点是大于等于m/2取上整,等价的,每个节点所包含的关键字的码数至多是m-1 至少是1

6 也称为:([m/2],m)树 []是取上整

B树的表示和实现

1 紧凑表示:外部节点和引用:将节点简化成一个点

2 B树的定义与实现:实现B树的节点类,每一个节点包含n个关键码和n+1个分支

   parent key   关键码    child

 3  构造空节点;构造初始规模为1的节点
《B树 B+树 红黑树 内存 文件系统》

B树的查找:

1 因为B树存储的东西太多,根本不能由内存容纳,需要放在外存
2 只需要将必须的节点放入内存中,尽量减少比如I/O的操作次数,比如活跃类的节点:根节点常驻内存
3 内存中的顺序查找和I/O操作相间隔组成的查找序列;查找每深入一层,就会引入一次I/O操作将下层节点读入内存;如果还是失败,根据失败方向的引用:找到下一层节点
4 最坏的情况到达B树底层的叶节点
5 针对45和49的查找是一致的,以41到49的外部节点的引用失败而告知,失败的话必然是存在与外部节点。如果在第r个关键码失败,也将深入到第r+1个后代引用

6 B树查找的运行时间:O(logn),最主要的因素。树的高度,在每一个高度时间:I/O操作是主要占用时间;有序向量的顺序查找(二分查找时,比顺序查找更低),要尽量设计成与读I/O操作时间相接近,这样的话实验证明,操作效率更高;每个节点内所含关键码的数值,大致取为几百。

7 B树树高的范围进行界定,树根第0层,叶子节点:第h-1层

8 N个内部节点,N+1个外部节点
   N种成功的可能,N+1种失败的可能
《B树 B+树 红黑树 内存 文件系统》

《B树 B+树 红黑树 内存 文件系统》

B树的插入——上溢——分裂

插入:

4阶B树的特点是
每个节点的分支树之多是4 至少是2等价于每个节点所包含的关键字的码数至多是3 至少是1,当不满足条件时,就会发生上溢

《B树 B+树 红黑树 内存 文件系统》

1 B树增高的唯一原因:为了解决上溢的现象,就需要在上溢的节点中选取中位数(向上取整的那种),将该中位数上提放在父节点中,上溢的现象是单调减的!

2 当插入元素使得上溢层层到达根的时候,也就是说,根节点也达到了上溢,此时选取中位数,一分为二,以中位数为新的根节点,B树的高度增加1,也是跟节点的修正案的作用(修正案:根节点的)

3 上溢修改的时间复杂度为小于等于O(1)xh = O(h)

B树的删除——下溢——合并

1 当B树的删除,使得剩下的树结构不满足B树的特点时,就成为发生了下溢现象

2 出现此现象,需要对树进行旋转,和修改;具体来说 在删除节点之后 需要进行合并操作;而且这种合并操作会不断的向上蔓延 直到树根;而树根节点只含有唯一的一个关键码;以致于在借出这个关键码之后 树根成为空节点

3 这也是B树高度得以下降的唯一可能

4 下溢修改的时间复杂度为小于等于O(1)xh =O(h)

《B树 B+树 红黑树 内存 文件系统》

5 五阶B数,关键码最多为4,而除过根节点以外的其他节点的所含关键码至少为2,发生下溢(删除249之后,某个节点只有一个关键码)后,先左顾右盼,看到右边的节点有4个关键码可以借出,但是这种借出是迂回的,下溢节点首先向父节点借出268,而右侧节点的最左侧关键码315则应该转而交给父亲,填补268留下的空缺,也就是旋转!

比如删除619,查找619的位置,然后剔除,在该节点左顾右盼,发现没有左节点,而右节点不能借出,旋转技巧并不适用,需要合并,就是分裂的逆过程,需要从该节点和右边节点对应的父亲节点中选一个在两个节点之间的值,也就是703,将改关键码取出下移,到达下面一层,作为粘合剂,将该节点和对应的右节点合并,但是更高一级的父节点,也发生了下溢,此时,和刚才一样,左顾右盼之后,需要合并操作,将根节点借出,

《B树 B+树 红黑树 内存 文件系统》

红黑树的基本条件

(1)节点不是黑的就是红的; 
(2)根节点是黑色的; 
(3)每个叶节点NIL是黑色的; 
(4)红色节点的儿子必须是黑色的; 
(5)每个节点到后代叶节点的简单路径上,均包含相同数目的黑色节点;

红黑树的应用

(1)在Java中, TreeMap,Java 8中HashMap中TreeNode节点都采用了红黑树实现。 
(2)C++中,STL的map和set也应用了红黑树; 
(3)Linux进程调度Completely Fair Scheduler; 
(4)用红黑树管理进程控制块epoll在内核中的实现,用红黑树管理事件块; 
(5)Nginx中,用红黑树管理timer等;
 

B树和B+树

1 结构上不同

B树,每个节点都存储key和data,所有节点组成这棵树,而且叶子节点指针为Null

  • 根节点至少有两个子节点
  • 每个节点有M-1个key,并且以升序排列
  • 位于M-1和M key的子节点的值位于M-1 和M key对应的Value之间
  • 其它节点至少有M/2个子节点

《B树 B+树 红黑树 内存 文件系统》

B+树,只有叶子节点存储data,叶子节点包含了这棵树的所有键值,叶子节点不存储指针

  • 有k个子结点的结点必然有k个关键码;
  • 非叶结点仅具有索引作用,跟记录有关的信息均存放在叶结点中。
  • 树的所有叶结点构成一个有序链表,可以按照关键码排序的次序遍历全部记录。

《B树 B+树 红黑树 内存 文件系统》

2 B+和B树的优点

B+ 树的优点在于:

  • 由于B+树在内部节点上不包含数据信息,因此在内存页中能够存放更多的key。 数据存放的更加紧密,具有更好的空间局部性。因此访问叶子节点上关联的数据也具有更好的缓存命中率。
  • B+树的叶子结点都是相链的,因此对整棵树的便利只需要一次线性遍历叶子结点即可。而且由于数据顺序排列并且相连,所以便于区间查找和搜索。而B树则需要进行每一层的递归遍历。相邻的元素可能在内存中不相邻,所以缓存命中性没有B+树好。

B树的优点在于:

  • 由于B树的每一个节点都包含key和value,因此经常访问的元素可能离根节点更近,因此访问也更迅速。

那为什么是B+树而不是B树呢,因为它内节点不存储data,这样一个节点就可以存储更多的key。在MySQL中,最常用的两个存储引擎是MyISAM和InnoDB,它们对索引的实现方式是不同的。

MyISAM :data存的是数据地址。索引是索引,数据是数据。

《B树 B+树 红黑树 内存 文件系统》

InnoDB:data存的是数据本身。索引也是数据。

  《B树 B+树 红黑树 内存 文件系统》

B和B+这部分参考于:

https://blog.csdn.net/zhuanzhe117/article/details/78039692

内存:

B树和B+广泛应用于文件存储系统以及数据库系统中,常见的存储结构:

我们计算机的主存基本都是随机访问存储器(Random-Access Memory,RAM),他分为两类:静态随机访问存储器(SRAM)和动态随机访问存储器(DRAM)。SRAM比DRAM快,但是也贵的多,一般作为CPU的高速缓存,DRAM通常作为内存。这类存储器他们的结构和存储原理比较复杂,基本是使用电信号来保存信息的,不存在机器操作,所以访问速度非常快,具体的访问原理可以查看CSAPP,另外,他们是易失的,即如果断电,保存DRAM和SRAM保存的信息就会丢失。

我们使用的更多的是使用磁盘,磁盘能够保存大量的数据,从GB一直到TB级,但是 他的读取速度比较慢,因为涉及到机器操作,读取速度为毫秒级,从DRAM读速度比从磁盘度快10万倍,从SRAM读速度比从磁盘读快100万倍。

总结:

介绍了文件系统和数据库系统中常用的B/B+ 树,它们通过对每个节点存储个数的扩展,使得对连续的数据能够进行较快的定位和访问,能够有效减少查找时间,提高存储的空间局部性从而减少IO操作。广泛用于文件系统及数据库中,如:

  • Windows:HPFS文件系统
  • Mac:HFS,HFS+文件系统
  • Linux:ResiserFS,XFS,Ext3FS,JFS文件系统
  • 数据库:ORACLE,MYSQL,SQLSERVER等中
    原文作者:B树
    原文地址: https://blog.csdn.net/Strive_0902/article/details/82933077
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞