gpt4 book ai didi

mongodb - Mongo中基于不同类型索引的项目的物理顺序-?

转载 作者:行者123 更新时间:2023-12-04 18:11:40 25 4
gpt4 key购买 nike

我读过几篇关于在 MongoDb 中建立索引的文章,但对记录的物理布局一无所知。我习惯于谈论关系数据库中的聚集索引(基于物理的相当快的索引)和非聚集索引。 Mongo 没有这样的术语,尽管他们的文档提到了二级索引。默认情况下,它似乎通过 _id 主键创建索引,这可能对应于存储中项目的物理顺序。请解释一下:如果我为每个表创建一个索引,它会根据索引自动按物理顺序存储项目吗?如果不是,我可以以某种方式设置它吗? _id呢,默认对应物理顺序吗?

最佳答案

MongoDB 索引是 B 树索引。索引 block 分配在用于存储文档的相同数据文件中。目前(从 MongoDB 版本 2.2 开始)不支持标准 B 树索引之外的任何其他索引类型。

引用:http://docs.mongodb.org/manual/core/indexes/

MongoDB 不会尝试对磁盘上的文档进行排序,也不会以任何特定的顺序放置 B-Tree 索引 block 。 MongoDB 使用内存映射文件来访问磁盘上的数据结构。因此,哪些索引 block 在 RAM 中以及哪些索引 block 被调出的问题被委托(delegate)给 OS 内存管理系统。

引用:http://docs.mongodb.org/manual/faq/storage/

MongoDB 文档在磁盘上总是连续的。任何文档都只会位于一个物理位置:从不需要从多个磁盘位置组合文档。

MongoDB 最初按照文档创建的顺序在磁盘上分配文档。如果一个文档的大小超过了分配的大小(通过对该文档的更新添加新的字段、子文档或数组元素),那么该文档将被移动到磁盘上的一个新位置,该位置足以容纳新文档。

删除文档将在分配的空间中创建“空洞”:这些空洞被放置在空闲列表中,新文档被插入到这些空洞中。因此,如果您对 MongoDB 集合执行重复的 remove() 和 insert() 操作,文档将以高度无序的方式分散在磁盘上。

特别是,文档将 不是 以 _id 顺序或任何其他索引的顺序排列在磁盘上。

有关 MongoDB 存储管理的更多信息,请查看以下演示文稿:

  • http://www.10gen.com/presentations/MongoNYC-2012/storage-engine-internals
  • http://www.10gen.com/presentations/mongosf-2012/journaling-and-the-storage-engine
  • http://www.10gen.com/presentations/mongosf-2012/indexing-and-query-optimization
  • 关于mongodb - Mongo中基于不同类型索引的项目的物理顺序-?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12538898/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com