B-Tree 例子(https://en.wikipedia.org/wiki/File:B-tree.svg)
不像二叉树每个节点只能有两个子节点,B-tree的每个节点可以有两个以上的子节点。每个节点最多可以有 m 个子节点,其中 m 叫做树的“order”(或者叫“阶”)。为了保持树的尽量平衡,我们还要求节点必须至少有 m / 2 个子节点(四舍五入)。
但还有一些例外:
叶子节点没有子节点
根节点的子节点数可以少于 m,但至少要有两个
如果根节点也是叶子节点(树只有一个节点),那它有0个子节点
上面的描述的是一个B-tree,SQLite用它来存储索引。为了存储表数据,SQLites使用一种B-tree的变体,称为B+tree。
B-treeB+ tree发音“Bee Tree”“Bee Plus Tree”用来存储索引表内部节点是否存储key是是内部节点是否存储value是否每个节点的子节点数少多内部节点 vs 叶子节点相同结构不同结构在我们开始实现索引之前,我将只讨论B+tree,但这里将其称为 B-tree 或者 btree。
有子节点(children)的节点被称为“内部”节点(internal node),内部节点和叶子节点在结构上不同:
m阶tree内部节点叶子节点存储key和指向子节点的指针key和valuekey的数目最多m-1个越多越好指针的数目keys + 1无value的数目无与key的数目相同Key的用途用来路由与value成对存储存储value?否是这里通过一个例子来看一下,当插入一个元素时,B-tree是怎样发生结构变化的。为了让事情看起来更容易理解,这棵B-tree的阶(order)设置为3(m=3),也就是说: