mongodb - 减少 MongoDB 数据库文件大小

我有一个曾经很大 (>3GB) 的 MongoDB 数据库。从那时起,文档已被删除,我预计数据库文件的大小会相应减小。

但由于 MongoDB 保留分配的空间,文件仍然很大。

我在这里和那里读到管理命令 mongod --repair 用于释放未使用的空间,但磁盘上没有足够的空间来运行此命令。

你知道我可以释放未使用空间的方法吗?

最佳答案

更新: 使用 compact 命令 WiredTiger 它看起来像 extra disk space will actually be released to the OS .


更新: 从 v1.9+ 开始,有一个 compact命令。

此命令将执行“内联”压缩。它仍然需要一些额外的空间,但不会那么多。


MongoDB 通过以下方式压缩文件:

  • 将文件复制到新位置
  • 遍历文档并重新排序/重新解决它们
  • 用新文件替换原始文件

您可以通过运行 mongod --repair 或直接连接并运行 db.repairDatabase() 来执行此“压缩”。

在任何一种情况下,您都需要某个空间来复制文件。现在我不知道为什么您没有足够的空间来执行压缩,但是,如果您有另一台具有更多空间的计算机,您确实有一些选择。

  1. 将数据库导出到另一台安装了 Mongo 的计算机(使用 mongoexport),然后您可以导入相同的数据库(使用 mongoimport)。这将产生一个更加压缩的新数据库。现在您可以停止将原始 mongod 替换为新的数据库文件,一切顺利。
  2. 停止当前的 mongod 并将数据库文件复制到更大的计算机上并在该计算机上运行修复。然后,您可以将新的数据库文件移回原来的计算机。

目前没有使用 Mongo 来“就地压缩”的好方法。而且Mongo绝对可以吸纳很多空间。

目前压缩的最佳策略是运行主从设置。然后,您可以压缩 Slave,让它 catch 并切换它们。我知道还是有点毛。也许 Mongo 团队会提出更好的就地压实,但我认为这在他们的名单上并不重要。目前认为驱动器空间很便宜(而且通常是这样)。

https://stackoverflow.com/questions/2966687/

相关文章:

json - JSON文件的mongoimport

mongodb - DynamoDB 与 MongoDB NoSQL

database - MongoDB 中的 findAndModify 和 update 有什么区别

database - 如何列出 mongo shell 中的所有数据库?

mongodb - 将图像存储在 MongoDB 数据库中

MongoDB - 管理员用户未授权

datetime - 在 mongodb 中存储日期/时间的最佳方法

mongodb - MongoDB 的命名约定是什么?

javascript - 找不到模块 '../build/Release/bson' ] 代码 :

mongodb - Elasticsearch vs.用于过滤应用程序的 MongoDB