从MongoDb进行批量删除时会遇到任何性能问题

时间:2015-10-12 01:29:52

标签: mongodb

我们正在考虑将日志信息写入MongoDB日志数据库,但在生产环境中运行Mongo的实践经验基本没有。

每天我们都会写一百万个+日志条目。超过(比如说)一个月的日志需要每天清除(比如说)。我担心的是Mongo将如何处理这些删除。

Mongo计划的潜在问题是什么? 我们需要删除删除吗? 鉴于我们将按时间顺序删除(即:插入顺序),我可以假设碎片不会成为问题吗? 数据库是否需要定期压缩?

2 个答案:

答案 0 :(得分:1)

  1. 潜在问题:没有,如果你可以忍受最终的一致性。
  2. 否。更好的方法是在文档中添加(ISO)Date字段,并在其上设置TTL index。假设提到的字段保存了日志条目的生成时间,您可以设置所述索引,如:
  3.     db.yourCollection.createIndex(
          {"nameOfDateField":1},
          // Seconds in Minutes * Minutes in hour * hours a day * days in month (commercial)
          {"expireAfterSeconds": 2592000}
        )
    

    这样,mongod子进程将负责删除过期数据,将集合转换为循环数据库。运动部件少,关心少。请注意,文档将在过期的同一时间内删除。在最糟糕的情况下,它们在到期之前可能需要2分钟(iirc)才能实际删除。在中位数处,过期文档应在到期后30秒内删除。

    1. 压缩不会回收mmapv1上的磁盘空间,仅限于WiredTiger.Keep记住文档从不碎片化。有趣的事实是被压缩的数据库将被锁定,我还没有为compact命令找到一个合适的用例。如果您担心磁盘空间:将重用数据文件中的空闲空间。所以是的,在最坏的情况下,您可以分配一些额外的数据文件。由于我不知道项目的要求和细节,因此您必须决定回收几GB的磁盘空间是否值得长时间锁定数据库。

答案 1 :(得分:0)

您可以为日志文件轮换配置MongoDB:

"管理日记" 部分当然感兴趣:

我的最后一个建议是关于" smallfiles" 选项:

设置为false以防止在不需要持久性的情况下日记的开销。要减少日记对磁盘使用的影响,可以启用日志,并将smallfiles设置为true以减小数据和日志文件的大小。