mongodb一直都在不斷的更新,不斷的發展,那些非常好玩也非常實用的功能都逐步加入到了mongodb中,這不就有了本篇對ttlindex的介紹,
剛好我們的生產業務場景中就有這個一個案例。。。
一:案例分析
我們生產的推薦系統要給用戶發送短信和郵件的關聯營銷。第一波是:當用戶在淘寶上下訂單之后,我們發送一次短信和郵件千人千面,第二波:
為了增加回購率,當用戶在10天之后的交易默認完成之后,我們將會再次觸發短信和郵件方式的千人千面,場景就這樣的,針對這種場景,我就畫出了
下面的圖。

其實呢,業務場景就是這樣的,看起來非常簡單,重點就在這里,第一波營銷中已經下單成功的客戶我們需要給保存起來,因為10天后我們需要對這
一批用戶再發送一次,這樣我們就需要用mongodb把當時已經下單成功的用戶保存到mongodb中,如果你不maintain mongodb的話,那么mongodb
的數據將會積壓的越來越多,這個時候我們就需要有一個機制,清空mongodb中10天之前的數據,對吧,因為這些數據已經是垃圾數據了,為了免去自己
寫個腳本去清除這些麻煩的數據,這次我們使用ttlindex來讓這些數據保存10天,也就是10天之后自動過期。
二:ttlIndex
現在我想大家對ttlIndex有了大概的認識了,下面我們看看怎么創建,我使用的GUI工具是robomongo,大家可以在官網上下載一下即可。。。然后我們
要查詢一下https://docs.mongodb.com/manual/reference/method/db.collection.createIndex/#db.collection.createIndex,看看這種collection
怎么創建。
db.collection.createIndex(keys, options)

從這個options中的expireAfterSeconds參數來看,這個value是一個int,並且是以second為單位,然后我們可以看到,這個ttlIndex是需要建立在docment
的field上面的,然后我們繼續往下看。
To create a TTL index, use the db.collection.createIndex() method with the expireAfterSeconds option on a field whose value is either a date or an array that contains date values.
從這句話中其實可以看到,這個field字段要么是date,要么是array中含有date字段,ok,看完這里,我們都明白了,接下來,我們創建一個簡單的planeollection,
並且date的過期時間是2s,主要是用來測試一下嘛。。。


ok,其實就是這么簡單,然后我們過60s之后再查看一下數據,可以看到,數據已經沒有啦~~~

可能有些人就有疑問了,為什么這里要說最多60s之后再查看數據,當然是有原因的,因為mongod有一個background task,60s啟動一次進行index scan,
如果過期,那么就會進行清除,不信的話,你可以看下官網的描述哦。

好了,本篇就說這么多,我想大家應該也知道了如何使用ttlIndex,當然我們也在幸福滿滿的使用這個玩意,感謝感謝~~~
