主要还是表达不一致造成了理解上的困扰,不如结合代码再来看看:
private static final class Node {
private int m; // 子节点的数目
private Entry[] children = new Entry[M]; // 存储子节点的数组
// 创建一个有k个子节点的结点
private Node(int k) {
m = k;
}
}
// 内部结点(internal nodes): 只用到了key和next
// 叶子结点(leaf nodes): 只用到了key和val
private static class Entry {
private Comparable key;
private final Object val;
private Node next;
public Entry(Comparable key, Object val, Node next) {
this.key = key;
this.val = val;
this.next = next;
}
}
在美团的上下文中:磁盘块 == Node
指引搜索方向的数据项 == Entry.key
真实数据 == Entry.val
指针 == Entry.next
在《高性能MySQL》的上下文中:索引列 == Entry.key
指向下级节点的指针 == Entry.next
如此一来,世界又和谐了。
另外有一个200多页的小册子《Modern B-Tree Techniques》安利给题主(当然这本书是2011年的了,对某一具体DB的评价可能不再准确,需要留心)。
里面除了B+ Tree的基础知识以外,还包括了:一些优化方法
如何与事务相结合
查询的时候怎么用的等话题