首先一点就是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", "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,空间,清理,删除
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。