Mongodb - TTL(time to live)特性


TTL集合支持mongodb對存儲的數據進行失效時間設置,經過指定的時間段后、或在指定的時間點過期,集合自動被mongod清除。這一特性有利於對一些只需要保存一定時間的數據信息進行存儲,比如機器產生的事件數據、日志、會話信息等。

Mongodb使用TTL索引特性來實現TTL集合。TTL通過一個后台線程讀取索引中數據類型的值,然后清除過期的集合。

集合中的文檔超過expireAfterSeconds關鍵字定義的時間后,該文檔就變得過期了,會被自動刪除。在創建TTL索引的時候,需要使用到關鍵字expireAfterSeconds,索引中對應的field的值的類型必須是date,或者對應的array包含date類型的值。

只能對單列索引創建TTL索引,組合索引不能是TTL索引。

 

1.經過指定的時間間隔后,集合失效

> db.log_events.createIndex({"createdAt": 1},{expireAfterSeconds: 180}) #5分鍾后過期
#插入文檔
> db.log_events.insert({
	"createdAt": new Date(),
	"logEvent": 2,
	"logMessage": "Success!"
})
#查看
> db.log_events.find()
{ "_id" : ObjectId("56e219ecf694a8d2cff60cca"), "createdAt" : ISODate("2016-03-11T01:05:48.082Z"), "logEvent" : 2, "logMessage" : "Success!" }
#5分鍾后再次查看(已被清除)
> db.log_events.find()
> 

 

2.指定時間點過期
將參數expireAfterSeconds設置為0,expireAt指定過期時間

> db.ttl.createIndex({"expireAt": 1},{expireAfterSeconds:0})
#插入文檔
> db.ttl.insert({
	"createdAt": new Date('Mar 11, 2016 09:30:00'),
	"logEvent": 2,
	"logMessage": "Success!"
})

 

使用TTL時是有限制的:
-如果要索引的字段已經在其他索引中使用,不能創建TTL索引
-索引不能包含多個字段
-如果定義的字段不存在,則永不過期
-不能對capped集合創建TTL索引


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM