详解清除MongoDB所占用的多余的磁盘空间的方法

发布时间:2022-04-21 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了详解清除MongoDB所占用的多余的磁盘空间的方法脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

首先一点就是mongodb 不会释放已经占用的硬盘空间,即使drop collection也不行,除非drop database。如果一个db曾经有大量的数据一段时间后又删除的话,硬盘空间就是一个问题,如何收回被mongdodb占用的多余空间?方法有两种@H_126_1@ 1. dump & reStore

mongodump -d databasename -o /path/to/dump_dir
echo 'db.dropDatabase()' | mongo <databasename>
mongorestore -d <databasename> /path/to/dump_dir

如果数据量不大,dump不需要太长时间的情况下,或者经常备份有dump文件的情况下,这种方法很简单

2. repair database
即在mongo shell中运行

db.repairDatabase()

, 或者

db.runCommand({ repairDatabase: 1 })

, 第二种方法可以带其他几个参数

{ repairDatabase: 1,
 PReserveCloneDFilesOnFailure: <boolean>,
 backupOriginalFiles: <boolean> }

repairDatabase是官方文档中认为唯一可以回收硬盘空间的方法。
repairDatabase is the appropriate and the only way to reclaim disk space.
当你有多个shard的且数据量巨大时,dump & restore方法会花费巨大的时间,这时第二种方法的优势就很明显,就是分别在每个shard上运行repairDatabase,结果会快很多。

PS:格式化mongo shell的输出
如果数据量大的情况下,mongo shell 默认的输出很乱,几乎没法阅读。我们可以用.pretty() 来解决这样的问题:

db.collection.find().pretty()

这样的输出会漂亮很多,每个field一行,

{
 "_id" : ObjectId("5396cd3823e97923ba689ef3"),
 "batch" : 66,
 "category" : 4,
 "cover_imgs" : [
 "/post_imgs/5396cd3823e97923ba689ef3/c_2.jpg",
 "/post_imgs/5396cd3823e97923ba689ef3/c_3.jpg",
 "/post_imgs/5396cd3823e97923ba689ef3/c_4.jpg"
 ],
 "created_at" : ISODate("2014-06-10T09:18:06.383Z"),
 "fav_count" : 0,
 "host_reply_count" : 338,
 "last_reply_date" : "2014-06-17 21:22:00",
 "post_date" : "2014-06-06 19:57:00",
 "referer" : "http://tieba.baidu.COM/f&#63;kw=%B9%C5%D7%B0%B5%E7%CA%D3%BE%E7",
 "reply_count" : 716,
 "reuse_tyPE" : 2,
 "section" : "古装视剧",
 "seq" : 27180,
 "serial" : false,
 "sort_index" : 0.997,
 "source_sITe" : "贴吧",
 "updated_at" : ISODate("2014-06-18T09:04:55.228Z"),
 "visible" : true
}
{
 "_id" : ObjectId("5396c7ca23e97921fb7de8e4"),
 "batch" : 74,
 "category" : 4,
}

配置使其成为Default:
添加如下配置到$HOME/.mongorc.js, 如果不存在则创建。

DBQuery.prototype._prettyShell = true

这样就不需要每次使用pretty()方法了,直接db.collection.find()即可。

脚本宝典总结

以上是脚本宝典为你收集整理的详解清除MongoDB所占用的多余的磁盘空间的方法全部内容,希望文章能够帮你解决详解清除MongoDB所占用的多余的磁盘空间的方法所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。