因此,让我首先从我对 MongoDb 如何将数据存储在磁盘上的理解开始这个问题:因此,当您在 mongodb 中创建数据库时,它会分配一个名为的大文件,<databasename>.0并在该文件中分配与特定数据对应的连续区域的范围集合或特定索引。
在填充此数据文件时,它会创建一个名为的新文件<databasename>.1并以类似方式填充它。因此,假设最近插入到特定数据库中的数据将位于编号最高的文件中似乎是明智的(我的性能测试证实了这一点)。
但是,我看不出这对索引来说是如何正确的……因为我们在谈论 bTree,所以让这个 bTree 以相同的方式分散在文件中似乎是不可能/明智的。由于 Mongo 正在对索引进行维护,整个索引是否存在于一个范围内,直到它超出它,然后将其重新定位到当前(编号最高的数据文件)?
这对我来说变得很重要,因为当从 Amazon EBS 快照启动数据库时,在卷预热之前访问这些数据文件似乎有巨大的开销。我只对集合中最近 N 个文档的一个子集感兴趣。如果我可以确定我只需要最近的几个数据文件,我可以在启动 mongod 之前通过顺序读取来预热这些文件。