mongodb13億數據清理記錄

mongodb上一個collection數據已經膨脹到13億,也就最近一兩個月的數據重要一點。於是考慮清除一下這個collection。
於是:
第一步:
先將原表備份

db.test.renameCollection("test_bak")

然後根據時間刪除數據

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

將兩個月前的數據全部清掉。
執行到這一步發現,現實很殘酷,基本上命令是卡死狀態。
查看collection上的索引:

db.test_bak.getIndexes()

發現createtime沒有索引,於是乎加上:

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

加索引這一步也要執行很久,慢慢等吧。
等到索引添加成功再次執行刪除數據的命令即可,也將執行很久。
通過:

db.test_bak.count()

查看還剩多少數據。
由於test_bak已經沒有新的數據寫入,還需要將最近兩個月的數據同步到test中,於是:

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

等待慢慢執行吧.....

以上爲實操分享。

所在在一開始就應該設置,無用的數據自動清理掉。
也就沒有後面頭疼的問題了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章