B-Tree/多路搜索树

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-Tree

B-Tree 的每个节点对应一个磁盘块,检索数据时从根节点查找,当需要进一步查询子节点时,会从磁盘中读取子节点对应的磁盘块,直到查找到对应元素,因为磁盘块中包含了子节点的指针、键值以及键值对应的数据,因此查找到键值时也就查找到了数据。

优点

相较于二叉树,减少树的高度,从而减少磁盘 I/O,提升效率。

扩展

B+-Tree

对于相同的磁盘块大小,B+-Tree 把 B-Tree 存放 data 的空间用于存放键值,data 都放在叶子节点,相对于相同高度的 B+Tree 可以提升树的阶,从而达到在不增加磁盘 I/O 的情况下提升可查找的数据范围。

示例图:

B+-Tree

MongoDB 使用的是 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)。

你可能感兴趣的:(B-Tree/多路搜索树)