这是一个基本问题,但非常重要,我不确定是否真的明白了.
在我们可以阅读的官方文档中
MongoDB将所有最近使用的数据保存在RAM中.如果您为查询创建了索引,并且您的工作数据集适合RAM,则MongoDB将从内存中提供所有查询.
我不确定的部分是
如果已为查询创建索引,并且工作数据集适合RAM
这里的"索引"是什么意思?
例如,如果我更新模型,然后我查询它,因为我已经更新它,它现在在RAM中,所以它将来自内存,但这在我的脑海中不是很清楚.
我们怎样才能确定我们查询的数据是否来自内存?据我所知,MongoDB使用空闲内存来缓存当前可用的内存数据,但有人可以进一步解释全局行为吗?
在哪种情况下,在我们的节点服务器中使用存储数据的变量比信任MongoDB缓存系统更好?
您如何全球建议使用MongoDB进行大量流量?
Sam*_*aye 27
一个开始明白什么是索引的好地方:http://docs.mongodb.org/manual/core/indexes/
在你了解了它之后,你会发现它们为什么如此优秀,然而,跳过一些更为复杂的问题.
我们怎样才能确定我们查询的数据是否来自内存?
一种方法是查看yields
任何查询的字段explain()
.这将告诉您读者产生锁定的次数,因为数据不在RAM中.
另一个更深入的方法是查看mongostat和其他此类程序等程序.这些程序将告诉您哪些页面错误(当数据需要从磁盘分页到RAM中时)正在发生mongod
.
据我所知,MongoDB使用空闲内存来缓存当前可用的内存数据,但有人可以进一步解释全局行为吗?
这实际上是不正确的.简单地说MongoDB可以做到这一点,但事实上并非如此.事实上,操作系统及其自己的分页算法(通常是LRU)为MongoDB执行此操作.MongoDB确实将索引计划缓存了一段时间,因此它不必经常检查和测试索引.
在哪种情况下,在我们的节点服务器中使用存储数据的变量比信任MongoDB缓存系统更好?
不确定你希望如何工作......我的意思是两者做了很多不同的事情,如果你打算在启动时将MongoDB中的数据读入你的应用程序,那么我绝对不会推荐它.
除了内存管理的OS算法非常成熟和快速,所以没关系.
您如何全球建议使用MongoDB进行大量流量?
嗯,这是一个非常大的问题.我真的会在这个主题上向你推荐一下Google,但正如文档所述,你需要确保你的工作集适合RAM.
这是一个很好的起点:将"工作集"放入MongoDB的RAM中意味着什么?
MongoDB尝试将整个集合保留在内存中:它对每个集合页面进行内存映射.对于内存中的所有内容,数据页和引用它们的索引必须保存在内存中.
如果MongoDB返回一条记录,你可以放心它现在在内存中(无论是否在你的查询之前).
MongoDB不像Web浏览器那样保留记录的"缓存".提交更改时,内存和磁盘都会更新.
与适当的用例匹配时,Mongo 非常棒.如果您有足够的服务器内存来缓存所有内容,并且在此之后迅速下降,则性能非常高.很多很多大型网站都使用MongoDB:现在内存非常便宜是一件好事.
归档时间: |
|
查看次数: |
35106 次 |
最近记录: |