详解清除MongoDB所占用的多余的磁盘空间的方法
首先一点就是mongodb 不会释放已经占用的硬盘空间,即使drop collection也不行,除非drop database。如果一个db曾经有大量的数据一段时间后又删除的话,硬盘空间就是一个问题,如何收回被mongdodb占用的多余空间?方法有两种
1. dump & restore
mongodump -d databasename -o /path/to/dump_dir echo 'db.dropDatabase()' | mongomongorestore -d /path/to/dump_dir
如果数据量不大,dump不需要太长时间的情况下,或者经常备份有dump文件的情况下,这种方法很简单。
2. repair database
即在mongo shell中运行
db.repairDatabase()
, 或者
db.runCommand({ repairDatabase: 1 })
, 第二种方法可以带其他几个参数
{ repairDatabase: 1,
preserveClonedFilesOnFailure: ,
backupOriginalFiles: }
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()即可。
栏 目:其它数据库
下一篇:关于mongoose连接mongodb重复访问报错的解决办法
本文标题:详解清除MongoDB所占用的多余的磁盘空间的方法
本文地址:https://zz.feitang.co/shujuku/28563.html
您可能感兴趣的文章
- 12-31hiredis从安装到项目实战操作
- 12-31phpmyadmin登录时怎么指定服务器ip和端口
- 12-31MySQL线上死锁分析实战
- 12-31MySQL 触发器的使用和理解
- 12-31MySQL 字段默认值该如何设置
- 12-31Redis主从同步配置的方法步骤(图文)
- 12-31MySQL 字符串拆分操作(含分隔符的字符串截取)
- 12-31redis 交集、并集、差集的具体使用
- 12-31MySQL精讲之二:DML数据操作语句
- 12-31PostgreSQL判断字符串是否包含目标字符串的多种方法


阅读排行
推荐教程
- 12-23PL/SQL登录Oracle数据库报错ORA-12154:TNS:无法解析指定的连接标识符
- 12-23使用imp和exp命令对Oracle数据库进行导入导出操作详解
- 12-11mysql代码执行结构实例分析【顺序、分支、循环结构】
- 12-08添加mysql的用户名和密码是什么语句?
- 12-23详解Oracle游标的简易用法
- 12-20PhpMyAdmin出现错误数据无法导出怎么办?
- 12-19Redis中实现查找某个值的范围
- 12-15浅析mysql迁移到clickhouse的5种方法
- 12-15CentOS7 64位下MySQL5.7安装与配置教程
- 12-14Mysql大型SQL文件快速恢复方案分享





