我将创建一个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)的大小?
答案 0 :(得分:3)
MongoDB默认存储引擎将文件映射到内存中。它提供了一种访问数据的有效方法,同时避免了双重缓存(即MongoDB缓存实际上是操作系统的页面缓存)。
这是否意味着只要我的数据小于可用内存,就像拥有内存数据库一样?
对于读取流量,是的。对于写入流量,它是不同的,因为MongoDB可能必须记录写入操作(取决于配置),并维护oplog。
仅从内存运行MongoDB(利用tmpfs)更好吗?
对于读取流量,它应该不会更好。将文件放在tmpfs上也可以避免双重缓存(这很好),但数据仍然可以被分页。一旦数据被分页,使用常规文件系统就会很快。
对于写入流量,如果日志和oplog也放在tmpfs上,它会更快。请注意,在这种情况下,系统崩溃将导致总数据丢失。通常,性能提升不值得冒险。