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,當然我們也在幸福滿滿的使用這個玩意,感謝感謝~~~