背景:mongodb(应用运营数据分析与自动自助化支持平台)每分钟有30w~40w的insert,20w~30w的update。数据保留一天,一天之前的数据可以清理。一天的数据量大概1亿左右。由于数据量较大,清理数据对系统造成了较大影响,入库会出现堵塞。经过和开发多次讨论,尝试了不同的方案。最终选择了合适的清理方式,系统也开始比较稳定地运行。
除了这个mongodb库外,也遇到其他库询问关于mongodb如何进行数据清理问题。这里将常见的清理方法列出来供大家参考。
清理方法:
-
采用定期一分钟删除一次的方法。方法如下:
"op" : "remove", "ns" : "fla.logGset", "query" : { "time" : { "$lt" : NumberLong(1495693140), "$gte" : NumberLong(1495693080) } },
对于数据量较小的表,这种方法比较合适。但是对于数据量较较大的库,删除速度太慢,跟不上入库的速度。比如mrcache这个库,单次删除执行时间需要大概10分钟~20分钟不等。这个远远追不上入库的速度。
-
采用晚上定期执行删除任务,删除小于某个时间的所有数据。
"op" : "remove", "ns" : "fla.logGset",