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 | db.test_bak.find({"createtime":{"$gte":ISODate("2019-06-09T00:00:00.000Z")}}).forEach(function(x){ |
等待慢慢执行吧…..
以上为实操分享。
所在在一开始就应该设置,无用的数据自动清理掉。
也就没有后面头疼的问题了。
mongodb13亿数据清理记录