我屮艸芔茻,mongo居然可以自动删除数据
1、需求
? ? ? ? 最近在接入其他部門的數(shù)據(jù),但是因?yàn)閿?shù)據(jù)量太大,所以導(dǎo)致mongo中的數(shù)據(jù)暴漲,所以需要定期刪除數(shù)據(jù)。
2、方案
- 方案1: 在機(jī)器上創(chuàng)建cron 定時(shí)任務(wù),刪除數(shù)據(jù),
缺點(diǎn):放在機(jī)器上不好管理
- 方案2: 在程序中起一個(gè)定時(shí)器刪除數(shù)據(jù)
缺點(diǎn):需要自己調(diào)job,然后還需要拉取所有的數(shù)據(jù)進(jìn)行讀取計(jì)算
- ?方案3:使用mongodb 自帶的TTL過(guò)期功能,毫無(wú)疑問(wèn),選擇這個(gè)
3、Mongo TTL功能
1、功能實(shí)現(xiàn)
2、舉個(gè)例子
創(chuàng)建索引
db.log_events.createIndex( { "createdAt": 1 }, { expireAfterSeconds: 3600 } )插入數(shù)據(jù)
db.log_events.insert( {"createdAt": new Date(),"logEvent": 2,"logMessage": "Success!" } )3、原理解析
mongo也沒(méi)有什么魔法,下面一起看下
1.可以看到mongo在date字段上創(chuàng)建了索引,這樣在操作刪除的時(shí)候只要讀取索引數(shù)據(jù)就可以判斷了
2.索引的過(guò)期時(shí)間是秒,也就是說(shuō)在創(chuàng)建的索引上增加過(guò)期時(shí)間,如果超過(guò)當(dāng)前時(shí)間就會(huì)刪除,這個(gè)符合邏輯,也是這么做的,合理
3.mongo 在后臺(tái)啟動(dòng)了一個(gè)線程,在后臺(tái)線程中讀取索引中的值并從集合中刪除過(guò)期的數(shù)據(jù)
4.后臺(tái)線程每60s運(yùn)行一次,所以數(shù)據(jù)不會(huì)立即刪除
4、注意點(diǎn)
總結(jié)
在開(kāi)始的時(shí)候還是走了一些彎路,主要是不知道要在date字段上建立索引,并且不知道60s 的運(yùn)行間隔,導(dǎo)致研究了老半天,就是看不到數(shù)據(jù)刪除。
不過(guò)不重要,也算是學(xué)習(xí)了
?
總結(jié)
以上是生活随笔為你收集整理的我屮艸芔茻,mongo居然可以自动删除数据的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
 
                            
                        - 上一篇: WIN10下Apache启动失败
- 下一篇: 【VS开发】MP4与H.264
