当我们说MongoDB使用内存映射文件时,是否意味着整个数据集被加载到内存中或仅加载到索引中?我需要清楚,清晰地了解内存映射文件在MongoDB中的工作原理。
答案 0 :(得分:0)
不,数据不会立即或急切地加载到内存中,而是按照加入模式加载到所谓的工作集(内存)中。
所以如果你查询:
db.c.find({a:1})
在a
上有一个索引而不覆盖查询,它会使与查询匹配的文档以及查询以满足查询所需的索引范围出错。
但只有在你进行实际查询后才会这样做。
你可以使用诸如touch(http://docs.mongodb.org/manual/reference/command/touch/)之类的命令或者使用最常见查询的脚本(实际上会加载到内存中)来使MongoDB急切加载到常驻内存(不是实际内存但足够接近)工作集,或者说RAM)。
mmap映射到所谓的虚拟内存,这基本上就是操作系统'但是,内存映射可能比实际内存大很多,正如已经引用的那样,文档可以提供比我更多的内容:http://docs.mongodb.org/manual/faq/storage/还可以了解虚拟内存:http://utcc.utoronto.ca/~cks/space/blog/unix/BasicMemoryManagement