我使用mongo来存储日志文件。 mongoDB和MysqL都运行在同一台机器上,虚拟化mongo env不是一个选项。 由于日志表的增长非常快,恐怕很快就会遇到性能问题。 有没有办法限制mongo的驻留内存,以便它不会占用所有可用的内存,并且会过度减慢MysqL服务器的速度?
数据库机器:Debian'lenny'5
因为我们需要所有的历史数据,我们不能使用capped集合,但是我也在考虑使用一个cron脚本来转储和删除旧的数据
如何使OS日程安排磁盘最佳访问?
什么是“高度非自愿的背景”开关意味着什么?
64位Windows平台不成熟吗? (即使比较运行在其上的64位二进制文件的32位二进制文件)
什么是Windows的好服务器性能监控软件?
我还应该考虑使用较小的密钥,如其他论坛上的build议?
Perl – 在Windows上解压zip文件太慢了
node.js与IIS 7.5的性能
为什么Eigen的Cholesky在Linux上的分解比在Windows上快得多?
如何find正在做I / O的代码
如何自动更新Docker实例之间共享的计数器
嘿弗拉德,你有几个关于日志的简单策略。
首先要知道的是,Mongo通常可以处理大量的连续插入,而没有大量的RAM。 原因很简单,你只能插入或更新最近的东西。 所以索引大小会增长,但是数据会不断地被调出。
换句话说,你可以把RAM的使用分成两大部分:索引和数据。
如果你正在运行典型的日志记录,数据部分将不断被刷新,所以只有索引真正停留在RAM中。
第二件要知道的是,通过将日志放入更小的桶中,可以减轻索引问题。 想想这样。 如果将所有日志收集到日期标记的集合中(称为logs20101206 ),则还可以控制RAM中索引的大小。
当你翻滚几天,旧的索引将从RAM中刷新,并且不会被再次访问,所以它将会消失。
但我也在考虑使用转储和删除旧数据的cron脚本
这种按天记录的方法也有助于删除旧数据。 在完成数据的三个月中,只需执行db.logs20101206.drop() ,集合即刻消失。 请注意,您不会回收磁盘空间(全部预先分配),但新数据将填满空白处。
我还应该考虑使用较小的密钥,如其他论坛上的建议?
是。
实际上,我已经将它嵌入到了我的数据对象中。 所以我使用logs.action或logs->action访问数据,但是在下面,数据实际上被保存到logs.a 在“领域”而不是在“价值”上花费更多的空间是很容易的,因此值得缩小“领域”并试图将其抽离其他地方。
对于使用wiredTiger引擎的--wiredTigerCacheSizeGB版本,选项--wiredTigerCacheSizeGB与问题相关。 你可以设置它,如果你知道你在做什么。 我不知道这是不是最好的做法,只是从文件中读取并在此提出。
对于Windows,似乎可以控制MongoDB使用的内存量,请参阅Captain Codeman上的本教程:
限制在没有虚拟化的情况下在Windows上使用MongoDB内存
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。