【问题标题】:Why not B+-Tree MongoDB为什么不用 B+-Tree MongoDB
【发布时间】:2013-03-24 00:01:34
【问题描述】:

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

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

谢谢。

【问题讨论】:

  • 虽然这是一个有趣的问题,但我认为如果不询问 MongoDB 人员自己,没有任何方法可以让某人给出明确的答案。
  • 我给 10gen 发了一封电子邮件。他们让我在他们的 MongoDB 论坛上发布我的问题。但我不认为很多人读过这个论坛。我没有收到任何回复。
  • 您在 4 小时前问过 it(截至我发表评论时)。多一点耐心。另外——他们可能不想花时间回答你的问题。
  • 根据doc,WiredTiger 使用称为 B-Tree(具体为 B+ 树)的数据结构在内存中维护表的数据

标签: mongodb geospatial b-tree spatial-index


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 您也可以在 MongoDB 中进行范围查询。
    • 嗯,确实如此。但是 B+ 树需要更少的搜索,因为它有额外的指针。
    【解决方案3】:

    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-03-05
      • 2011-09-05
      • 1970-01-01
      • 2017-03-02
      • 2011-03-31
      • 1970-01-01
      • 2013-10-14
      • 1970-01-01
      • 2011-05-30
      相关资源
      最近更新 更多