mongodb 3.x 之實用新功能窺看[1] ——使用TTLIndex做Cache處理

一線碼農發表於2016-07-29

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

 

相關文章