设计mongodb将整个内容加载到内存中

时间:2014-02-04 02:45:09

标签: mongodb memory

我参与了一个项目,他们获得足够的RAM来将整个数据库存储在内存中。据经理说,这是10Gen推荐的。这是违反直觉的。这真的是你想要使用Mongodb的方式吗?

2 个答案:

答案 0 :(得分:0)

这不是反直觉的......实际上我发现非常直观

How much faster is the memory usually than the disk?中,您可以阅读:

  

(...)当您执行顺序时,内存只会快6倍   访问(内存为350 Mvalues /秒,相比之下为58 Mvalues / sec)   盘);但当你做 随机时, 快了大约100,000倍   访问

因此,如果您可以将所有数据都放在RAM中,那就非常好了,因为您将非常快速地读取数据。

关于MongoDB,来自FAQ's

  

在一台小机器上运行MongoDB当然是可能的   可用内存量。

     

MongoDB会自动使用机器上的所有可用内存   缓存。系统资源监视器显示MongoDB使用了很多   内存,但它的用法是动态的。如果突然需要另一个过程   在服务器的RAM的一半,MongoDB将为另一个提供缓存的内存   过程

     

从技术上讲,操作系统的虚拟内存子系统可以管理   MongoDB的记忆。这意味着MongoDB将使用尽可能多的可用内存   尽可能根据需要交换到磁盘。 具有足够内存的部署   在RAM中适应应用程序的工作数据集将达到最佳效果   性能

问题是您通常拥有的数据远多于可用内存。然后你必须转到磁盘,磁盘I / O很慢。关于数据库性能,避免全扫描查询是关键(访问磁盘时更为重要)。因此,如果您的数据集不适合内存,则应该针对绝大多数访问模式设置索引并尝试fit those indexes in memory

  

如果您已为查询和工作数据集创建了索引   适合RAM,MongoDB提供内存中的所有查询。

答案 1 :(得分:0)

这一切都取决于数据库的大小。我猜你说你的数据库实际上很小,否则我无法看到10gen的人是如何给出这样的建议的,我的意思是@Stennie甚至没有给出这样的建议(顺便提一下他是10gen)。

即使您的数据库很小,我也看不到经理的建议。 MongoDB不进行自己的内存管理,因为它不会将数据“固定”到像memcached或其他基于内存的数据库那样的页面。

这意味着mongod数据的分页可能是非常不可预测的,例如,您将花费更多时间来保存RAM而不是分页数据。这就是为什么最好确保你的工作集适合它并且它可以加载速度,这些都是基于你的硬件和查询。

@Stennies评论几乎总结了你应该对MongoDB采取的立场。