8

有谁知道为什么 MongoDB 使用 B-Tree 而不是 B+-Tree?

据我所知,大多数 DBMS 使用 B+-Tree。MongoDB使用B-Tree有什么特别的原因吗?

谢谢。

4

3 回答 3

3

当我学习 B/B+ 时,这个问题让我很困惑。现在我得到了一些答案:

  1. mysql 是一个关系数据库,而 mongo 不是。这意味着我们在mysql中进行了更多的范围操作(例如select * from xx where id > 23)。所以B+树的优势并不明显。
  2. B 树的最佳搜索时间是 O(1),而 B+ 总是 O(log n)。因此,当搜索一些“热门”数据时。B树有更好的性能。(但是如果你在使用B树的时候总是搜索叶子中的数据,它会占用更多的磁盘IO时间,所以它可能性能不佳。)

在我看来,这取决于mongo如何实现的细节。但我不是Mongo开发人员。:D

于 2019-07-22T08:37:01.100 回答
1

MongoDB 使用 B+ by WiredTiger 默认存储引擎。

1、https://docs.mongodb.com/manual/core/wiredtiger/

从 MongoDB 3.2 开始,WiredTiger 存储引擎是默认存储引擎。

2、http://source.wiredtiger.com/3.2.1/tune_page_size_and_comp.html

WiredTiger 使用称为 B-Tree(具体为 B+ 树)的数据结构在内存中维护表的数据,将 B-Tree 的节点称为页。内部页面只携带密钥。叶页存储键和值。

于 2021-01-15T09:08:49.493 回答
0

据我所知,MongoDB 将索引存储为存储数据的同一文件的一部分。所以B树更好!B+ 树只在叶子中存储数据。

于 2015-04-24T18:10:31.747 回答