• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    详解清除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 实现主从读写分离实现的实例代码
    • OpenStack Ceilometer用MongoDB解决占用磁盘空间过大问题
    • mongodb 集群重构和释放磁盘空间实例详解
    • MongoDB磁盘IO问题的3种解决方法
    上一篇:MongoDB使用自带的命令行工具进行备份和恢复的教程
    下一篇:MongoDB的Master-Slave主从模式配置及主从复制要点解析
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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