为了账号安全,请及时绑定邮箱和手机立即绑定

减少MongoDB数据库文件大小

/ 猿问

减少MongoDB数据库文件大小

弑天下 2019-11-05 16:28:09

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

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

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

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


查看完整描述

3 回答

?
HUH函数

使用compact命令 WiredTiger,看起来多余的磁盘空间实际上将释放到OS上。


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

该命令将执行“在线压缩”。它仍然需要一些额外的空间,但并不需要那么多。


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

  • 将文件复制到新位置

  • 遍历文档并重新排序/重新解决它们

  • 用新文件替换原始文件

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

无论哪种情况,您都需要在某个地方复制文件。现在,我不知道为什么您没有足够的空间来执行压缩,但是,如果您有另一台计算机具有更大的空间,则确实可以选择。

  1. 将数据库导出到安装了Mongo的另一台计算机上(使用mongoexport),然后可以导入同一数据库(使用mongoimport)。这将导致压缩的新数据库。现在,您可以停止mongod使用新的数据库文件进行原始替换,一切顺利。

  2. 停止当前mongod,然后将数据库文件复制到更大的计算机上,然后在该计算机上运行修复程序。然后,您可以将新的数据库文件移回原始计算机。

当前没有使用Mongo进行“紧凑压缩”的好方法。而且Mongo绝对可以占用很多空间。

目前最好的压缩策略是运行主从设置。然后,您可以压缩从站,让它赶上并切换它们。我知道还是有点毛。也许Mongo团队会提出更好的现场压实度,但我认为这并不在他们的榜首。当前假定驱动器空间便宜(通常是便宜的)。


查看完整回答
反对 回复 2019-11-05
?
慕斯王

我遇到了同样的问题,只需在命令行中执行此操作即可解决:


mongodump -d databasename

echo 'db.dropDatabase()' | mongo databasename

mongorestore dump/databasename


查看完整回答
反对 回复 2019-11-05
?
宝慕林4294392

看来Mongo v1.9 +已支持紧凑版!


> db.runCommand( { compact : 'mycollectionname' } )

请参阅此处的文档:http : //docs.mongodb.org/manual/reference/command/compact/


“与repairDatabase不同,compact命令不需要双重磁盘空间即可完成工作。在工作时确实需要少量额外空间。此外,compact更快。”


查看完整回答
反对 回复 2019-11-05

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信