JCZ2MkKb5S8ZX9pq
V2EX  ›  MongoDB

mongodb 有啥瘦身的方法嘛?

By JCZ2MkKb5S8ZX9pq at 2019 年 10 月 23 日 · 15205 次点击
  • 清洗了一遍数据,size 从 15G 缩到了 10G。
  • 但 storage size 依然没变,还是 7G+。(甚至还变大了一丢丢)
  • 我知道 storage size 占了地方就不让了。
  • 也知道可以通过复制集新建的方式来搞。
  • 就想问问各位高手,有没有其它瘦身的方法?

10 条回复
JCZ2MkKb5S8ZX9pq
   1
JCZ2MkKb5S8ZX9pq  
OP
   2019 年 10 月 23 日
补充:目前的版本是 mongodb 3.6
JCZ2MkKb5S8ZX9pq
   2
JCZ2MkKb5S8ZX9pq  
OP
   2019 年 10 月 23 日
看到现在 4.2 了,有必要升级嘛?有坑吗?
Infernalzero
   3
Infernalzero  
   2019 年 10 月 23 日
需要 compact,但是这个操作要谨慎,会影响业务
JCZ2MkKb5S8ZX9pq
   4
JCZ2MkKb5S8ZX9pq  
OP
   2019 年 10 月 23 日
@Infernalzero compact 过了,图上的就是 compact 之后的结果……
asilin
   5
asilin  
   2019 年 10 月 23 日
我们之前也遇到了这个问题,版本 3.6。

当时的解决方式是使用 rocksdb 引擎的 mongo 3.4 版本,根据业务模型将数据从老的集群导出,并导入到新的集群,切换 mongos 配置到新集群,写入没有问题后将中间切换丢的数据再补上。

之所以使用 rocksdb 引擎的 mongo 3.4 版本,因为这个引擎对 SSD 支持友好,并能够在删除数据后释放逐步物理空间。
JCZ2MkKb5S8ZX9pq
   6
JCZ2MkKb5S8ZX9pq  
OP
   2019 年 10 月 23 日
@asilin 好的吧,跟复制集差不多,看来主要思路还是要重写一遍数据了。
JCZ2MkKb5S8ZX9pq
   7
JCZ2MkKb5S8ZX9pq  
OP
   2019 年 10 月 23 日
@Infernalzero
@asilin
另外 compact 这个命令,只用了 150 秒左右,是不是太快了?它应该没重写数据吧?
JCZ2MkKb5S8ZX9pq
   8
JCZ2MkKb5S8ZX9pq  
OP
   2019 年 10 月 23 日
最终直接用 duplicate 复制了一个,storagesize 和 index 都变小了。
确认没问题再把旧的删了。
旧的_id 也可以复制过来。
JCZ2MkKb5S8ZX9pq
   9
JCZ2MkKb5S8ZX9pq  
OP
   2019 年 10 月 23 日
其实感觉下次再搞,直接在清洗数据的时候就直接导出到新的 collection 里,这样原数据也安全点,新出来的也小一点。
JCZ2MkKb5S8ZX9pq
   10
JCZ2MkKb5S8ZX9pq  
OP
   2019 年 10 月 23 日
@asilin
碰到个莫名的问题
一个数据集,复制之后,多出来小两百条 doc,碰到过嘛?

note_all_copy: 100.0% 5460905/5460732 5460905 docs successfully imported, 0 docs failed.

感觉等会儿要再比对看看了
推荐工具
› RoboMongo
推荐书目
› 50 Tips and Tricks for MongoDB Developers
Related Blogs
› Snail in a Turtleneck
© 2026 V2EX · 34ms · 3.9.8.5