我有一个包含1000万个文档的集合,每个文档都有四个简单的文本字段。 Mongo第一次在字段上构建索引大约需要5分钟(即当我从Mongo shell运行ensureIndex命令时)。
我知道Mongo索引是在内存中维护的B树数据结构。但是当我关闭并重新启动mongod时,索引立即生效(即)在服务器启动后立即运行的查询,使用索引。
想知道:
1.当这些索引与磁盘上的文件同步时?
2.如果mongod重新启动,这些索引什么时候会被装回内存?
Mongo在以下两个阶段构建索引(可以在mongod日志中观察到这一点)。知道在每个阶段做了什么。
1.外部分类进度
2. Btree自下而上的进展
答案 0 :(得分:1)
索引的管理方式与收集本身的方式相同:它们存储在磁盘上,但(希望,如果你有足够的RAM),缓存在内存中。
当您访问它们时,它们将被加载到内存中(逐页,而不是一次全部)。他们将留在记忆中,直到你需要记忆为其他东西。这是由缓存策略管理的,该策略应该将数据库中最常访问的部分保留在内存中。