详解清除MongoDB所占用的多余的磁盘空间的方法_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()即可。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索mongodb
, 删除
, 空间
清理
clover隐藏多余磁盘、怎么删除多余的磁盘、mongodb 占用磁盘、平阳多余的安置房出售、cad删除多余的线,以便于您获取更多的相关知识。

时间: 2024-12-17 05:47:56

详解清除MongoDB所占用的多余的磁盘空间的方法_MongoDB的相关文章

彻底理解浮动float CSS浮动详解 清除浮动的方法

原文:彻底理解浮动float CSS浮动详解 清除浮动的方法  我们把网页的常用的布局格式分为以下三种:   1.标准流.  所谓的标准流就是,行内元素自己单独一行,而块级元素是上下显示的. 以前我们学习的都是标准流.   注意:标准流使我们网页布局中最稳定的一种结构       2. 浮动流  使我们学习的脱离标准流的第一种方式.会影响我们标准流的排列.所以,我们布局的时候,能用标准流做的,就不用浮动做.       3. 定位流   定位流也是脱离标准流的一种模式.它完全脱离标准流,不会对标

快速清除Win8中的Windows.old节省磁盘空间

在windows8中Windows.old文件夹中的存放了非常大的容量,本文为大家介绍快速清除Win8中的Windows.old节省磁盘空间. 点击"磁盘清理" 点击"清理系统文件" 最后出现完整的清单,选择"以前的Windows安装"--"确定",即可将Windows.old文件删除.

详解win7旗舰版系统下电脑音箱有电流声的方法

详解win7系统下电脑音箱有电流声的方法: 由于显示器对周围磁场十分敏感,所以只要将音箱靠近显示器,仔细观察屏幕上的图像有无局域的偏色或整体的色位移,就可以检验出音箱的防磁性能来.音箱的磁性是发自扬声器的,防磁音箱的扬声器有的是采用的是双磁路的设计,后面的磁铁抵消前面磁铁向我扩散的磁性;有的喇叭后的永磁体罩有金属罩.有的一些x.1音箱的低音炮没有采用防磁设计,这对于它们位置的摆放要格外的注意才行.今天就有用户发现自己的电脑音箱发出滋滋的声音,一开始以为是音箱的故障,拿出手机连接音箱测试,发现并不

详解Android中通过Intent类实现组件间调用的方法_Android

Intent是Android中用来调用其它组件的类,通过Intent,我们可以非常方便的调用Activity,Broadcast Receiver和Service. Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse("http://www.baidu.com")); startActivity(intent); 上面这段代码可以用来调用第三方的Activity(启动第三方浏览器来打开百度首页

详解C#中通过委托来实现回调函数功能的方法_C#教程

委托(delegate)是一种可以把引用存储为函数的类型,这类似于c++中的函数指针. 回调函数c++中的回调函数,就是用函数指针来实现的.类似的,c#中用委托,来实现回调函数的功能. 回调函数为什么被称为回调函数?比如你调用了一个函数,那么就叫调用,但是如果你在调用一个函数的时候,还需要把一个函数提供给该函数,让这个函数来调用你的函数,那么你提供的这个函数就被称为回调函数(callback). 对于python这样的动态语言而言,就没有c#,c++提供特殊的语法实现回调函数,因为在python

详解Java编程中线程同步以及定时启动线程的方法_java

使用wait()与notify()实现线程间协作 1. wait()与notify()/notifyAll()调用sleep()和yield()的时候锁并没有被释放,而调用wait()将释放锁.这样另一个任务(线程)可以获得当前对象的锁,从而进入它的synchronized方法中.可以通过notify()/notifyAll(),或者时间到期,从wait()中恢复执行. 只能在同步控制方法或同步块中调用wait().notify()和notifyAll().如果在非同步的方法里调用这些方法,在运

详解Android应用中使用TabHost组件进行布局的基本方法_Android

TabHost布局文件 我们先来了解一下布局文件的基本内容:1. 根标签及id 设置Android自带id : XML布局文件中, 可以使用 标签设置, 其中的id 需要引用 android的自带id : android:id=@android:id/tabhost ; getHost()获取前提 : 设置了该id之后, 在Activity界面可以使用 getHost(), 获取这个TabHost 视图对象; 示例 : 复制代码 代码如下: <tabhost android:id="@an

详解C语言中的错误报告errno与其相关应用方法_C 语言

C语言标准库中的错误报告用法有三种形式.1.errnoerrno在<errno.h>头文件中定义,如下 #ifndef errno extern int errno; #endif 外部变量errno保存库程序中实现定义的错误码,通常被定义为errno.h中以E开头的宏, 所有错误码都是正整数,如下例子 # define EDOM 33 /* Math argument out of domain of function. */ EDOM的意思是参数不在数学函数能接受的域中,稍后的例子中用到了

mongodb拷贝数据库copyDatabase()。实现释放磁盘空间的方法。

db.copyDatabase("from","to","127.0.0.1:16161"); 将127.0.0.1上的from库.拷贝到to库. 这样做有一个额外的好处.就是from库中可能是删除过数据的库.看我们知道删除数据时磁盘空间是不会被释放的.参考博客里的另一篇文章:mongodb删除集合后磁盘空间不释放 肯能造成占用很大磁盘空间.虽然可以用    db.repairDatabase()修复数据.但这种方法有两个不好的地方.1.在生产上