Note:这是在2013年写的,当时MongoDB还很年轻,它没有今天的功能,虽然这个答案对于mmap仍然适用,但对于MongoDB现在实现的其他存储技术,如WiredTiger或Percona,它没有.
一个很好的开始理解what is指数:http://docs.mongodb.org/manual/core/indexes/
在你复习完这一点之后,你会发现他们为什么如此优秀,然后跳转到一些更复杂的问题.
我们如何确定我们查询的数据是否来自内存?
一种方法是查看任何查询explain()
上的yields
字段.这将告诉您读卡器因为数据不在RAM中而释放锁的次数.
另一个更深入的方法是看mongostat等节目.这些程序将告诉您mongod
上发生了哪些页面错误(当数据需要从磁盘分页到RAM中时).
我知道MongoDB使用空闲内存来缓存关于当前空闲内存的数据,但有人能进一步解释全局行为吗?
这实际上是不正确的.说MongoDB做到了这一点比较容易,但实际上它没有做到.实际上,是操作系统和它自己的分页算法(通常是LRU)为MongoDB实现了这一点.MongoDB确实会在一段时间内缓存索引计划,这样就不必不断地判断和测试索引.
在哪种情况下,在存储数据的 node 服务器中使用变量会比信任MongoDB缓存系统更好?
我不知道你怎么想的...我的意思是,这两种方法做的事情完全不同,如果您打算在启动时将MongoDB中的数据读取到应用程序中,并将其写入var,那么我绝对不会推荐这样做.
此外,用于内存管理的操作系统算法非常成熟和快速,所以它是可以的.
您建议如何在全局使用MongoDB来获得巨大的流量?
嗯,这是个大问题.真的,我建议你在这个主题上用谷歌搜索一下,但正如文档所述,你需要确保你的工作集适合RAM.
这里有一个很好的起点:What does it mean to fit "working set" into RAM for MongoDB?