B-Tree/多路搜索树
B-Tree 又叫 B树/B-树,-
是连接符号,不是减号,不能读做 B减树,常用做文件系统索引。
特征
对于一颗 m 阶的 B-Tree 需满足以下特征:
- 根结点至少有两个子节点。
- 每个中间节点都包含 k-1 个元素和 k 个子节点,其中 m/2 <= k <= m。
- 每一个叶子节点都包含 k-1 个元素,其中 m/2 <= k <= m。
- 所有的叶子结点都位于同一层。
- 每个节点中的元素从小到大排列,节点当中 k-1 个元素正好是 k 个子节点包含的元素的值域分划。
说明:m 阶中的 m 指的是每个节点最多包含 m 个子节点;每个元素也被称为关键字或者键值,每个元素对应一条数据。
示例图:
B-TreeB-Tree 的每个节点对应一个磁盘块,检索数据时从根节点查找,当需要进一步查询子节点时,会从磁盘中读取子节点对应的磁盘块,直到查找到对应元素,因为磁盘块中包含了子节点的指针、键值以及键值对应的数据,因此查找到键值时也就查找到了数据。
优点
相较于二叉树,减少树的高度,从而减少磁盘 I/O,提升效率。
扩展
B+-Tree
对于相同的磁盘块大小,B+-Tree 把 B-Tree 存放 data 的空间用于存放键值,data 都放在叶子节点,相对于相同高度的 B+Tree 可以提升树的阶,从而达到在不增加磁盘 I/O 的情况下提升可查找的数据范围。
示例图:
B+-TreeMongoDB 使用的是 B-Tree 还是 B+-Tree
这个问题答案并不明确,只提供一些线索:
- MongoDB indexes use a B-tree data structure.
- Why not B+-Tree MongoDB
- WiredTiger Storage Engine
- WiredTiger 官网
- 别瞎分析了,MongoDB 使用的是 B+ 树,不是你们以为的 B 树
最后提供一个帮助理解数据结构的工具网站 Data Structure Visualizations(无需 VPN)。
网友评论