MongoDB TTL索引的實(shí)例詳解
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)建期間開始刪除失效文檔 當(dāng)基于前臺(tái)方式創(chuàng)建索引時(shí),TTL線程在索引創(chuàng)建完成后開始刪除失效文檔 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查詢字段沒有創(chuàng)建索引導(dǎo)致的連接超時(shí)異常解案例分享
- MongoDB學(xué)習(xí)筆記(六) MongoDB索引用法和效率分析
- mongodb處理中文索引與查找字符串詳解
- pymongo為mongodb數(shù)據(jù)庫(kù)添加索引的方法
- MongoDB數(shù)據(jù)庫(kù)中索引(index)詳解
- Mongodb索引的優(yōu)化
- MongoDB入門教程之索引操作淺析
- 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)建、查看、刪除操作詳解
相關(guān)文章
教大家8天學(xué)通MongoDB——第一天 基礎(chǔ)入門篇
MongoDB是目前非常流行的一種非關(guān)系型數(shù)據(jù)庫(kù)(NoSQL),因其操作簡(jiǎn)單、完全免費(fèi)、源碼公開等特點(diǎn),受到了IT從業(yè)人員的青睞,并被廣泛部署于實(shí)際的生產(chǎn)環(huán)境中。本文教大家8天學(xué)通MongoDB——第一天 基礎(chǔ)入門篇,感興趣的朋友一起來(lái)了解了解吧2015-09-09mongodb使用docker搭建replicaSet集群與變更監(jiān)聽(最新推薦)
replicaSet和cluster從部署難度相比,replicaSet要簡(jiǎn)單許多。如果所存儲(chǔ)的數(shù)據(jù)量規(guī)模不算太大的情況下,那么使用replicaSet方式部署mongodb是一個(gè)不錯(cuò)的選擇,這篇文章主要介紹了mongodb使用docker搭建replicaSet集群與變更監(jiān)聽,需要的朋友可以參考下2023-03-03MongoDB安裝到windows服務(wù)的方法及遇到問(wèn)題的完美解決方案
這篇文章主要介紹了MongoDB安裝到windows服務(wù)的方法及遇到問(wèn)題的完美解決方案,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2016-11-11Pycharm連接MongoDB數(shù)據(jù)庫(kù)安裝教程詳解
這篇文章主要介紹了Pycharm連接MongoDB數(shù)據(jù)庫(kù)安裝教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11MongoDB分片在部署與維護(hù)管理中常見的事項(xiàng)總結(jié)大全
分片(sharding)是指將數(shù)據(jù)拆分,將其分散存放在不同的機(jī)器上的過(guò)程。下面這篇文章主要給大家總結(jié)介紹了關(guān)于MongoDB分片在部署與維護(hù)管理中常見事項(xiàng)的相關(guān)資料,文中通過(guò)圖文以及示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2018-09-09開發(fā)分布式醫(yī)療掛號(hào)系統(tǒng)MongoDB集成實(shí)現(xiàn)上傳醫(yī)院接口
這篇文章主要介紹了開發(fā)分布式醫(yī)療掛號(hào)系統(tǒng)MongoDB集成實(shí)現(xiàn)上傳醫(yī)院接口,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04MongoDB查詢與游標(biāo)之分布式文件存儲(chǔ)
這篇文章主要介紹了MongoDB的查詢與游標(biāo),查詢就是返回集合中文檔的一個(gè)子集,子集的范圍從0個(gè)文檔到整個(gè)集合;游標(biāo)的客戶端實(shí)現(xiàn)通常能夠在很大程度上對(duì)查詢的最終輸出進(jìn)行控制;感興趣的同學(xué)可以參考閱讀2023-04-04mongodb 3.4下遠(yuǎn)程連接認(rèn)證失敗的解決方法
這篇文章主要給大家介紹了在mongodb 3.4下遠(yuǎn)程連接認(rèn)證失敗的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編一起來(lái)學(xué)習(xí)學(xué)習(xí)吧。2017-06-06