gpt4 book ai didi

performance - MongoDB限制内存

转载 作者:IT老高 更新时间:2023-10-28 13:05:38 24 4
gpt4 key购买 nike

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

数据库机器:Debian 'lenny' 5

其他解决方案(请评论):

  • 由于我们需要所有历史数据,我们不能使用上限集合,但我也在考虑使用转储和删除旧数据的 cron 脚本

  • 我是否也应该按照其他论坛的建议考虑使用较小的 key ?

最佳答案

嘿,Vlad,您在这里有一些关于日志的简单策略。

首先要知道的是,Mongo 通常可以在没有大量 RAM 的情况下处理大量连续插入。这样做的原因很简单,您只插入或更新最近的东西。所以索引大小会变大,但数据会不断被分页。

换句话说,您可以将 RAM 使用分为两个主要部分:索引和数据。

如果您正在运行典型的日志记录,则数据部分会不断被清除,因此只有索引真正保留在 RAM 中。

要知道的第二件事是,您可以通过将日志放入较小的存储桶来缓解索引问题。这样想吧。如果您将所有日志收集到一个带日期戳的集合中(称为 logs20101206),那么您还可以控制 RAM 中索引的大小。

随着时间的推移,旧索引将从 RAM 中刷新,并且不会再次被访问,因此它会简单地消失。

but I am also considering using a cron script that dumps and deletes old data

这种按天记录的方法也有助于删除旧数据。在三个月内,当您处理完数据后,您只需执行 db.logs20101206.drop() 即可,该集合立即消失。请注意,您不会回收磁盘空间(都是预先分配的),但新数据会填满空位。

Should I also consider using smaller keys, as suggested on other forums?

是的。

事实上,我已将它内置到我的数据对象中。所以我使用 logs.actionlogs->action 访问数据,但在下面,数据实际上保存到 logs.a。在“字段”上花费比在“值”上更多的空间真的很容易,因此值得缩小“字段”并尝试将其抽象到其他地方。

关于performance - MongoDB限制内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4365224/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com