主頁(yè) > 知識(shí)庫(kù) > MongoDB TTL索引的實(shí)例詳解

MongoDB TTL索引的實(shí)例詳解

熱門(mén)標(biāo)簽:Linux服務(wù)器 網(wǎng)站排名優(yōu)化 地方門(mén)戶網(wǎng)站 服務(wù)外包 鐵路電話系統(tǒng) 百度競(jìng)價(jià)排名 呼叫中心市場(chǎng)需求 AI電銷

MongoDB TTL索引的實(shí)例詳解

TTL索引是一種特殊類型的單字段索引,主要用于當(dāng)滿足某個(gè)特定時(shí)間之后自動(dòng)刪除相應(yīng)的文檔。也就是說(shuō)集合中的文檔有一定的有效期,超過(guò)有效期的文檔就會(huì)失效,會(huì)被移除。也即是數(shù)據(jù)會(huì)過(guò)期。過(guò)期的數(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)建期間開(kāi)始刪除失效文檔
    當(dāng)基于前臺(tái)方式創(chuàng)建索引時(shí),TTL線程在索引創(chuàng)建完成后開(kāi)始刪除失效文檔   
    TTL索引的刪除不能完全保證失效期后一定刪除,存在一定延遲(取決于mongod的工作負(fù)載)
    TTL刪除文檔后臺(tái)線程每60s移除失效文檔(因此可能存在已過(guò)失效期,文檔還在的情形)
    在副本集環(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)集合

二、TTL索引示例

# mongo --shell localhost:27000 TTLData.js 
MongoDB shell version: 3.2.11
connecting to: localhost:27000/test

repSetTest:PRIMARY> addTTLTestData() //添加集合數(shù)據(jù)
Create three records in database each with a create time that is 1 minute apart
Created three test documents, oldest being 4 mins old
Now create a TTL index with expiry of 5 mins on the createDate field as follows
db.ttlTest.ensureIndex({createDate:1}, {expireAfterSeconds:300})

repSetTest:PRIMARY> db.ttlTest.find()  //當(dāng)前向集合里插入了3個(gè)文檔
{ "_id" : 1, "createDate" : ISODate("2017-03-10T03:23:01.169Z") }
{ "_id" : 2, "createDate" : ISODate("2017-03-10T03:24:01.169Z") }
{ "_id" : 3, "createDate" : ISODate("2017-03-10T03:25:01.169Z") }

//下面為測(cè)試集合上的文檔添加索引,即5分鐘后索引失效
repSetTest:PRIMARY> db.ttlTest.createIndex({createDate:1}, {expireAfterSeconds:300})
{
    "createdCollectionAutomatically" : false,
    "numIndexesBefore" : 1, // Author : Leshami
    "numIndexesAfter" : 2,  // Blog  : http://blog.csdn.net/leshami
    "ok" : 1
}

//查找文檔
repSetTest:PRIMARY> db.ttlTest.find()
{ "_id" : 1, "createDate" : ISODate("2017-03-10T03:23:01.169Z") }
{ "_id" : 2, "createDate" : ISODate("2017-03-10T03:24:01.169Z") }
{ "_id" : 3, "createDate" : ISODate("2017-03-10T03:25:01.169Z") }

//當(dāng)指定時(shí)間到期后,文檔被刪除,如下,查詢不到任何文檔
repSetTest:PRIMARY> db.ttlTest.find()

如有疑問(wèn)請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

您可能感興趣的文章:
  • MongoDB索引使用詳解
  • MongoDB的基礎(chǔ)查詢和索引操作方法總結(jié)
  • MongoDB性能篇之創(chuàng)建索引,組合索引,唯一索引,刪除索引和explain執(zhí)行計(jì)劃
  • MongoDB中創(chuàng)建索引需要注意的事項(xiàng)
  • pymongo給mongodb創(chuàng)建索引的簡(jiǎn)單實(shí)現(xiàn)方法
  • MongoDB查詢字段沒(méi)有創(chuàng)建索引導(dǎo)致的連接超時(shí)異常解案例分享
  • MongoDB學(xué)習(xí)筆記(六) MongoDB索引用法和效率分析
  • mongodb處理中文索引與查找字符串詳解
  • pymongo為mongodb數(shù)據(jù)庫(kù)添加索引的方法
  • MongoDB數(shù)據(jù)庫(kù)中索引(index)詳解
  • Mongodb索引的優(yōu)化
  • MongoDB入門(mén)教程之索引操作淺析
  • MongoDB教程之索引介紹
  • MongoDB的索引
  • MongoDB數(shù)據(jù)庫(kù)中索引和explain的使用教程
  • mongodb索引知識(shí)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
  • 基于MongoDB數(shù)據(jù)庫(kù)索引構(gòu)建情況全面分析
  • 關(guān)于MongoDB索引管理-索引的創(chuàng)建、查看、刪除操作詳解

標(biāo)簽:銅川 仙桃 衡水 黃山 湘潭 崇左 湖南 蘭州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MongoDB TTL索引的實(shí)例詳解》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266