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

前端技术 2023/09/05 MongoDB

首先一点就是mongodb 不会释放已经占用的硬盘空间,即使drop collection也不行,除非drop database。如果一个db曾经有大量的数据一段时间后又删除的话,硬盘空间就是一个问题,如何收回被mongdodb占用的多余空间?方法有两种
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?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()即可。

本文地址:https://www.stayed.cn/item/13719

转载请注明出处。

本站部分内容来源于网络,如侵犯到您的权益,请 联系我

我的博客

人生若只如初见,何事秋风悲画扇。