你应该经常压缩你的MongoDB吗?

我已经从Parse [1]读了一篇文章,可以运行compact来保存MongoDB的索引大小。

我们的总索引大小是10GB,我们的内存总容量是12GB,因为你可能知道当索引大小接近内存大小的时候MongoDB性能很差,所以我们试图运行compact ,把大小减小到7GB。

但是,一周之后,这个规模已经增长到了10GB,所以我们现在有一个计划任务来执行compact命令。

我在想,如果这真的有帮助,为什么指数增长如此之快,并达到10GB稳定?

[1] http://blog.parse.com/2013/03/26/always-be-compacting/

parsing有一个独特的问题 – 他们不知道人们如何使用他们提供的MongoDB。 大多数依靠Parse作为pipe理MongoDB用例的人大多会阅读Parse试图解决客户不良使用的问题。

这就是说,你不应该总是压缩。 事实上,如果你不得不经常压缩,这意味着你正在低效地使用MongoDB。 MongoDB可能被“碎片整理”的原因是:

  • 定期删除文件
  • 更新文档并不断更新文档(不包括primefaces更新)

如果您定期删除文件,那么您应该考虑使用TTL或加盖的collections。

如果您正在更新文档并使文档变大(即不断扩展数组),那么您应该考虑重新devise模式以限制文档的无限增长。 或者,您可以考虑添加填充作为将来更新的占位符。

无论哪种方式,如果你经常需要紧凑化,这是一个不正确使用MongoDB的症状,你应该考虑重新devise你的模式。 压缩是阻止命令,在数据量大于几个演出可能需要一段时间才能完成。