美文网首页
mongo回顾(三:索引B+树)

mongo回顾(三:索引B+树)

作者: supremecsp | 来源:发表于2021-04-08 23:16 被阅读0次

    上回提到mongo怎么进行模式设计。今天就来聊聊mongo的索引B树。

    https://docs.mongodb.com/manual/indexes/ (MongoDB indexes use a B-tree data structure.)

    我们知道mysql的索引是特殊的B+树,根节点只保存索引字段,叶子节点才真正存有数据,如果是聚簇索引叶子节点存有该行所有数据,其他索引存的是索引列和ID,特殊的B+树是因为叶子节点是双向链表,所以mysql的范围查询性能是比较高的
    B树的话,则为根节点也保存数据,而且叶子节点不包括根节点,叶子节点也没有链表。
    这样导致根据索引查数据时命中即可返回,不需要每次都到叶子节点才能取得数据,而且树占用空间会比B+树小。

    mongo如果采用B树也可以理解

    mongo属于nosql,集合间关联关系不大,MongoDB应用场景为单个文档查询时。此时时间复杂度最好可以到O(1)。

    但是mongo对于单个集合的聚合操作支持度挺好,单个集合的范围查询在业务上也比较常见;而且看极客时间的时候,讲师也说用的是B+树。那么mongo是否采用B+树?

    根据官方文档可以发现,mongo在3.2版本后采用了WiredTiger
    https://docs.mongodb.com/manual/core/wiredtiger/ (Starting in MongoDB 3.2, the WiredTiger storage engine is the default storage engine. )
    根据WiredTiger文档,可以发现WiredTiger的索引采用的是B+树
    http://source.wiredtiger.com/mongodb-3.4/tune_page_size_and_comp.html
    WiredTiger maintains a table's data in memory using a data structure called a B-Tree ( B+ Tree to be specific), referring to the nodes of a B-Tree as pages. Internal pages carry only keys. The leaf pages store both keys and values.

    因此结论:mongo的索引采用的也是B+树

    相关文章

      网友评论

          本文标题:mongo回顾(三:索引B+树)

          本文链接:https://www.haomeiwen.com/subject/xnkbkltx.html