MongoDB TTL索引的實(shí)例詳解
創(chuàng)新互聯(lián)公司專注于企業(yè)成都全網(wǎng)營(yíng)銷、網(wǎng)站重做改版、赤城網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5響應(yīng)式網(wǎng)站、商城網(wǎng)站開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為赤城等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。TTL索引是一種特殊類型的單字段索引,主要用于當(dāng)滿足某個(gè)特定時(shí)間之后自動(dòng)刪除相應(yīng)的文檔。也就是說集合中的文檔有一定的有效期,超過有效期的文檔就會(huì)失效,會(huì)被移除。也即是數(shù)據(jù)會(huì)過期。過期的數(shù)據(jù)無(wú)需保留,這種情形適用于如機(jī)器生成的事件數(shù)據(jù),日志和會(huì)話信息等等。本文主要描述TTL索引的使用。
一、TTL索引
創(chuàng)建方法 db.collection.createIndex(keys, options) options: expireAfterSeconds 指定多少秒或者包含日期值的數(shù)組 創(chuàng)建示例 db.eventlog.createIndex( { "lastModifiedDate": 1 }, { expireAfterSeconds: 3600 } ) 何時(shí)失效 在指定的時(shí)間達(dá)到后失效,也即是索引字段的值加上一個(gè)特定的秒數(shù)之后 如果索引字段是一個(gè)數(shù)組,即索引字段上存在著多個(gè)日期值,此時(shí)MongoDB取最小值加上失效時(shí)間(lowest()) 對(duì)于非日期字段或不包含日期數(shù)組的索引字段,文檔不會(huì)失效 對(duì)于不包含索引字段的文檔,文檔不會(huì)失效 刪除操作 mongod的一個(gè)后臺(tái)線程會(huì)讀取索引的值并將失效的文檔從集合移除 當(dāng)TTL線程被激活后,可以從db.currentOp()或者從profile觀察到刪除操作 何時(shí)刪除 當(dāng)基于后臺(tái)方式創(chuàng)建索引時(shí),TTL線程能夠在索引創(chuàng)建期間開始刪除失效文檔 當(dāng)基于前臺(tái)方式創(chuàng)建索引時(shí),TTL線程在索引創(chuàng)建完成后開始刪除失效文檔 TTL索引的刪除不能完全保證失效期后一定刪除,存在一定延遲(取決于mongod的工作負(fù)載) TTL刪除文檔后臺(tái)線程每60s移除失效文檔(因此可能存在已過失效期,文檔還在的情形) 在副本集環(huán)境中,TTL后臺(tái)線程僅僅在主副本上工作,輔助副本上由復(fù)制操作實(shí)現(xiàn) 在使用TTL索引查詢時(shí),與使用非TTL索引一樣 一些限制 不能基于已經(jīng)存在索引的字段創(chuàng)建TTL索引以及非日期字段創(chuàng)建TTL索引,文檔不會(huì)失效 TTL索引不支持基于多個(gè)字段的復(fù)合索引 不支持定長(zhǎng)集合