Mongodb - 使用内存或使用缓存

时间:2015-05-25 23:05:12

标签: performance mongodb caching memory

我将创建一个5节点的mongodb集群。它会比写入更重要,并且有一个问题,哪个设计会带来更好的性能。这些节点将专用于mongodb。举个例子,假设每个节点都有64GB的ram。

从mongodb文档中可以看出:

  

MongoDB自动使用计算机上的所有可用内存作为缓存

这是否意味着只要我的数据小于可用的ram就像拥有内存数据库一样?

我还读到可以在内存中实现mongodb

  

http://edgystuff.tumblr.com/post/49304254688/how-to-use-mongodb-as-a-pure-in-memory-db-redis

如果我的数据非常动态(每隔几个小时可以达到50gb到75gb),那么理论上设计mongodb会让mongodb通过其缓存(mongo的默认设置)进行自我管理会更好吗?或者最初将mongodb放入内存,如果数据增长超过ram使用交换空间(SSD)的大小?

1 个答案:

答案 0 :(得分:3)

MongoDB默认存储引擎将文件映射到内存中。它提供了一种访问数据的有效方法,同时避免了双重缓存(即MongoDB缓存实际上是操作系统的页面缓存)。

这是否意味着只要我的数据小于可用内存,就像拥有内存数据库一样?

对于读取流量,是的。对于写入流量,它是不同的,因为MongoDB可能必须记录写入操作(取决于配置),并维护oplog。

仅从内存运行MongoDB(利用tmpfs)更好吗?

对于读取流量,它应该不会更好。将文件放在tmpfs上也可以避免双重缓存(这很好),但数据仍然可以被分页。一旦数据被分页,使用常规文件系统就会很快。

对于写入流量,如果日志和oplog也放在tmpfs上,它会更快。请注意,在这种情况下,系统崩溃将导致总数据丢失。通常,性能提升不值得冒险。