关于mongodb回收磁盘空间的问题
MongoDB compact 命令详解
为什么需要 compact
remove和drop的区别
mongodb删除集合有两种方式:
- db.connection,remove({});该命令是将集合中的文档按一定条件在btree中逐个删除,但物理空间不会被删除,导致一种删了跟没删一样的错觉;
- db.connection.remove({});该命令和上命令的想法一样,但直接删除的是集合里的物理文件,空间会立即回收并释放,remove操作相当于只是把记录删除,而记录所占用的物理空间却没有变动,当有新数据插入时,会优先插入到指定的位置,总大小不变,直到之前remove腾出的空位被占满才会占用新的空间去存放,像经常更新记录的表使用remove操作即可;对于频繁插入而忘记删除的集合,当需要空间去干其他的事情时,就需用到compact操作回收磁盘空间了;
compact对集合的影响
由于本人使用mongodb的时间不长,目前公司的mongodb为主备节点的版本,当在主节点执行
db.connection.runCommand(“compact”);时,会提示“will not run compact on an active replica set primary as this