使用MongoDB如何改善数据空洞
PHPz
PHPz 2017-04-22 08:56:10
0
1
862

数据空洞指的是,一个表经历了频繁的update和delete后,其数据文件的尺寸大于其数据实际尺寸。比如show dbs看到一个库为400G,导出再导入后就只有250G。

PHPz
PHPz

学习是最好的投资!

全部回复(1)
洪涛

不需要导出再导入,使用repairDatabase 或者 compact 都会压缩数据。但是他们运行中对性能有影响。

The repairDatabase command compacts all collections in the database. It is identical to running the compact command on each collection inpidually.

需要注意的是compact不会像repairDatabase那样释放已经申请的磁盘空间,但是新的磁盘请求会使用整理出来的空间。另一个要注意的是,这两个命令都需要额外的空间,参见 dick usage 一节。这也就是说,如果磁盘空间已经满了,这两个命令也用不了。不过这时,可以重新同步一个从结点,重建磁盘数据。

如果在replica set中使用repairDatabase或者compact的话,最好采用 rolling 的方式。 Rolling 的方式就是先把一个从结点(secondary)拿出来,整理磁盘。然后在所有的从结点上重复以上步骤。最后撤换主结点 (step down primary),然后在其上整理磁盘。这样可以避免这些操作对线上服务的影响。

推荐使用 usePowerOf2Sizes 让 MongoDB 在频繁更新删除下能更有效的使用磁盘,因为每次的申请和释放都是2的幂次的大小。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板