B树
注:本文来自http://www.cnblogs.com/yangecnu/p/Introduce-B-Tree-and-B-Plus-Tree.html
- 在计算机科学中,B树(英语:B-tree)是一种自平衡的树,能够保持数据有序。
- 这种数据结构能够让查找数据、顺序访问、插入数据及删除的动作,都在O(logn)内完成。
- B树,概括来说是一个一般化的二叉查找树(binary search tree),可以拥有多于2个子节点。
- 与自平衡二叉查找树不同,B树适用于读写相对大的数据块的存储系统,例如磁盘。
- B树减少定位记录时所经历的中间过程,从而加快存取速度。
- B树这种数据结构可以用来描述外部存储。这种数据结构常被应用在数据库和文件系统的实现上。
1、定义
- M阶的B 树,允许每个节点有M-1个子节点。
- 根节点至少有两个子节点
- 每个节点有M-1个key,并且以升序排列
- 位于M-1和M key的子节点的值位于M-1 和M key对应的Value之间
- 其它节点至少有M/2个子节点
- 下图是一个M=4 阶的B树:
2、B+树是对B树的一种变形树,它与B树的差异在于:
- 有k个子结点的结点必然有k个关键码
- 非叶结点仅具有具有索引作用,跟记录有关的信息均存放在叶结点中。
- 树的所有叶结点构成一个有序链表,可以按照关键码排序的次序遍历全部记录。
3、B和B+树的区别
- B+树的非叶子结点只包含导航信息,不包含实际的值,所有的叶子结点和相连的节点使用链表相连,便于区间查找和遍历。
4、B+ 树的优点
- 由于B+树在内部节点上不好含数据信息,因此在内存页中能够存放更多的key。 数据存放的更加紧密,具有更好的空间局部性,(比如使用数组,按起始地址定位)。因此访问叶子几点上关联的数据也具有更好的缓存命中率。
- B+树的叶子结点都是相链的,因此对整棵树的便利只需要一次线性遍历叶子结点即可。而且由于数据顺序排列并且相连,所以便于区间查找和搜索。而B树则需要进行每一层的递归遍历。相邻的元素可能在内存中不相邻,所以缓存命中性没有B+树好。
5、B树的优点
- 优点在于,由于B树的每一个节点都包含key和value,因此经常访问的元素可能离根节点更近,因此访问也更迅速。
- 下面是B 树和B+树的区别图: