mongodb13亿数据清理记录

mongodb上一个collection数据已经膨胀到13亿,也就最近一两个月的数据重要一点。于是考虑清除一下这个collection。
于是:
第一步:
先将原表备份

1
db.test.renameCollection("test_bak")

然后根据时间删除数据

1
db.test_bak.remove({"createtime":{"$lte":ISODate("2019-06-09T00:00:00.000Z")}})

将两个月前的数据全部清掉。
执行到这一步发现,现实很残酷,基本上命令是卡死状态。
查看collection上的索引:

1
db.test_bak.getIndexes()

发现createtime没有索引,于是乎加上:

1
db.test_bak.createIndex({"createtime":-1})

加索引这一步也要执行很久,慢慢等吧。
等到索引添加成功再次执行删除数据的命令即可,也将执行很久。
通过:

1
db.test_bak.count()

查看还剩多少数据。
由于test_bak已经没有新的数据写入,还需要将最近两个月的数据同步到test中,于是:

1
2
3
db.test_bak.find({"createtime":{"$gte":ISODate("2019-06-09T00:00:00.000Z")}}).forEach(function(x){
db.test.insert(x);
})

等待慢慢执行吧…..

以上为实操分享。

所在在一开始就应该设置,无用的数据自动清理掉。
也就没有后面头疼的问题了。

作者

太阳当空赵先生

发布于

2019-08-09

更新于

2022-02-22

许可协议

评论