B树
B树中一个结点允许多余两个key的存在。
B树是一种树状数据结构,他能够存储数据,对其进行排序并允许以O(logn)的时间复杂度进行查找,顺序读取,插入和删除等操作。
B树中允许一个结点包含多个key可以使3个,4个,5个甚至更多,并不确定,需要看具体的实现。现在我们选择一个参数M,来构造一个B树,我们可以把他看做是M阶的B树,那么该树会具有如下特点:
- 每个结点最多M-1个key,并且以升序排序。
- 每个结点最多能有M个子结点。
- 根结点至少有两个子结点。
实际应用中B树的阶数一般都比较大(通常大于100),所以,即使存储大量的数据,B树的高度仍然比较小,在某些应用场景下可体现出它的优势。
B+树
B+树是对B树的一种变形树,它与B树的差异在于:
- 非叶结点仅具有索引作用,也就是说,非叶子节点只存储key,不存储value。
- 树的叶结点构成一个有序链表,可以按照key排序的次序遍历全部数据。
B树的优点
由于B树的每一个结点都包含key和value,因此我们根据key查找value时,只需要找到key所在的位置,就能够找到value,但B+树只有叶子结点存储数据,索引每一次查找,都必须一次一次,一直找到树的最大深度处,也就是找到叶子结点的深度,才能找到value。
B+树的优点
- 由于B+树在非叶子结点上不包含真正的数据,只当做索引使用,因此在内存相同的情况下,能够存放更多的key。
- B+树的叶子结点都是相连的,因此对整棵树的遍历只需要一次线性遍历叶子结点即可。而且由于数据顺序排序并且相连,所以便于区间查找和搜索。而B树则需要进行每一层的递归遍历。