MongoDB限制内存

我使用mongo来存储日志文件。 mongoDB和mysql都运行在同一台机器上,虚拟化mongo env不是一个选项。 由于日志表的增长非常快,恐怕很快就会遇到性能问题。 有没有办法限制mongo的驻留内存,以便它不会占用所有可用的内存,并且会过度减慢mysql服务器的速度?

数据库机器:Debian'lenny'5

其他解决scheme(请评论):

嘿弗拉德,你有几个关于日志的简单策略。

首先要知道的是,Mongo通常可以处理大量的连续插入,而没有大量的RAM。 原因很简单,你只能插入或更新最近的东西。 所以索引大小会增长,但是数据会不断地被调出。

换句话说,你可以把RAM的使用分成两大部分:索引和数据。

如果你正在运行典型的日志记录,数据部分将不断被刷新,所以只有索引真正停留在RAM中。

第二件要知道的是,通过将日志放入更小的桶中,可以减轻索引问题。 想想这样。 如果将所有日志收集到日期标记的集合中(称为logs20101206 ),则还可以控制RAM中索引的大小。

当你翻滚几天,旧的索引将从RAM中刷新,并且不会被再次访问,所以它将会消失。

但我也在考虑使用转储和删除旧数据的cron脚本

这种按天记录的方法也有助于删除旧数据。 在完成数据的三个月中,只需执行db.logs20101206.drop() ,集合即刻消失。 请注意,您不会回收磁盘空间(全部预先分配),但新数据将填满空白处。

我还应该考虑使用较小的密钥,如其他论坛上的建议?

是。

实际上,我已经将它嵌入到了我的数据对象中。 所以我使用logs.actionlogs->action访问数据,但是在下面,数据实际上被保存到logs.a 在“领域”而不是在“价值”上花费更多的空间是很容易的,因此值得缩小“领域”并试图将其抽离其他地方。

对于使用wiredTiger引擎的--wiredTigerCacheSizeGB版本,选项--wiredTigerCacheSizeGB与问题相关。 你可以设置它,如果你知道你在做什么。 我不知道这是不是最好的做法,只是从文件中读取并在此提出。

对于Windows,似乎可以控制MongoDB使用的内存量,请参阅Captain Codeman上的本教程:

限制在没有虚拟化的情况下在Windows上使用MongoDB内存