注意:这是在 2013 年写的,当时 MongoDB 还很年轻,它没有今天的功能,虽然这个答案仍然适用于 mmap,但它不适用于 MongoDB 现在实现的其他存储技术,例如 WiredTiger ,或佩尔科纳。
开始了解什么是索引的好地方:http: //docs.mongodb.org/manual/core/indexes/
在你复习之后,你会理解为什么它们如此出色,但是,跳过一些更复杂的问题。
我们如何确定我们查询的数据是否来自内存?
一种方法是查看yields
任何查询中的字段explain()
。这将告诉您有多少次读者因为数据不在 RAM 中而产生了锁定。
另一种更深入的方法是查看诸如mongostat 之类的程序和其他此类程序。这些程序将告诉您在您的mongod
.
我知道 MongoDB 使用空闲内存来缓存有关当前空闲内存的数据,但是有人可以进一步解释全局行为吗?
这实际上是不正确的。说 MongoDB 做到这一点更容易,但实际上它没有。实际上是操作系统和它自己的分页算法,通常是LRU,为 MongoDB 做这件事。MongoDB 会在一段时间内缓存索引计划,这样它就不必不断地检查和测试索引。
在哪种情况下,在存储数据的节点服务器中使用变量比信任 MongoDB 缓存系统更好?
不知道你期望它如何工作......我的意思是两者做的事情完全不同,如果你打算在启动时将数据从 MongoDB 读入你的应用程序到那个 var 中,那么我绝对不会推荐它。
此外,内存管理的操作系统算法非常成熟和快速,所以没关系。
您如何在全球范围内建议使用 MongoDB 来处理巨大的流量?
嗯,这是一个很大的问题。真的,我会建议你在这个主题上稍微谷歌一下,但正如文档所述,你需要确保你的工作集适合一个人的 RAM。
这是一个很好的起点:将“工作集”放入 MongoDB 的 RAM 意味着什么?