20

可能重复:
自动压缩 mongodb 中已删除的空间?

我的理解是,在删除操作时,MongoDB 不会释放磁盘空间,而是会根据需要重用它。

  1. 那是对的吗?
  2. 如果没有,我会运行修复命令吗?
  3. 修复可以在实时 mongo 实例上运行吗?
4

3 回答 3

19
  1. 是的,它是正确的。
  2. 不,最好给 mongodb 尽可能多的磁盘空间(如果 mongodb 可以分配更多的空间而不是更少的磁盘碎片,那么额外分配空间是昂贵的操作)。但是,如果您希望可以db.repairDatabase()从 mongodb shell 运行以缩小数据库大小。
  3. 是的,您可以在实时 mongodb 实例上运行 repairDatabase (最好在非高峰时段运行)
于 2011-04-01T21:06:08.113 回答
7

这有点重复这个 MongoDB 问题......

自动压缩mongodb中删除的空间?

有关如何...的详细信息,请参阅该答案

  • 回收一些空间
  • 使用服务器端 JS 运行重复性作业以获取空间(包括您可以运行的脚本......)
  • 对于某些用例,您可能希望如何查看 Capped Collections!

你也可以看到这个相关的博客文章: http: //learnmongo.com/posts/compacting-mongodb-data-files/

于 2011-04-01T21:19:34.650 回答
3

如果您负担不起系统被锁定的代价,或者没有双倍的存储空间,我还有另一个解决方案可能比执行 db.repairDatabase() 更好。

您必须使用副本集。

我的想法是,一旦你删除了所有占用磁盘的多余数据,停止次要副本,擦除其数据目录,启动它并让它与主副本重新同步。与其他次要重复,一次一个。

在 master 上,执行 rs.stepDown() 将 MASTER 移交给同步的辅助节点之一,现在停止这个,擦除它,然后让它重新同步。

这个过程很耗时,但是当您执行 rs.stepDown() 时,它应该只花费几秒钟的停机时间。

于 2012-11-13T21:50:55.717 回答