为了账号安全,请及时绑定邮箱和手机立即绑定

使用MongoDB如何改善数据空洞

使用MongoDB如何改善数据空洞

临摹微笑 2018-08-17 18:10:39
数据空洞指的是,一个表经历了频繁的update和delete后,其数据文件的尺寸大于其数据实际尺寸。比如show dbs看到一个库为400G,导出再导入后就只有250G。
查看完整描述

1 回答

?
子衿沉夜

TA贡献1828条经验 获得超3个赞

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

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

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

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

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


查看完整回答
反对 回复 2018-08-26
  • 1 回答
  • 0 关注
  • 985 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信