mongo設置自動過期時間


 
        

Time To Live(TTL) 集合

MongoDB 2.2 引入一個新特性–TTL 集合,TTL集合支持失效時間設置,或者在某個特定時間, 
集合自動清除超時文檔,者用來保存一個諸如session會話信息的時候非常有用。

如果想使用TTL集合,用用到 expireAfterSeconds 選項

官網使用文檔設置方法:

Expire Documents after a Specified Number of Seconds

首先創建索引,設置過期時間

db.log_events.createIndex( { "createdAt": 1 }, { expireAfterSeconds: 3600 } )
  • 1

然后存儲數據入庫

db.log_events.insert( {
   "createdAt": new Date(),
   "logEvent": 2,
   "logMessage": "Success!"
} )
  • 1
  • 2
  • 3
  • 4
  • 5

mongodb 會在大於 expireAfterSeconds 指定值的秒數后,過期

Expire Documents at a Specific Clock Time

與上面的設置類似 
首先建立索引,設置 expireAfterSeconds 為 0

db.log_events.createIndex( { "expireAt": 1 }, { expireAfterSeconds: 0 } )
  • 1

然后存儲數據

db.log_events.insert( {
   "expireAt": new Date('July 22, 2013 14:00:00'),
   "logEvent": 2,
   "logMessage": "Success!"
} )
  • 1
  • 2
  • 3
  • 4
  • 5

expireAt 的值為特定的時間值,等時間到達expireAt的值時,這個文檔就失效了。

補充說明

當你在集合中某一個字段建立TTL索引后,后台會有一個單線程,通過不斷查詢(默認60s一次)索引的值來判斷document是否有過期,並且刪除文檔的動作還依據mongod實例的負載情況,如果負載很高,可能會稍微延后一段時間再刪除。

還有一個需要注意的地方,在復制集成員中,TTL后台線程只刪除primary的過期數據,如果此實例變為secondary角色,則后台線程閑置。

修改TTL索引的expireAfterSeconds屬性值: 
注:如果想更改過期時間expireAfterSeconds,可以使用collMod方法,要不然你只能只用dropIndex(),createIndex()方法重建索引了,我想這樣的方法在億級數據量下是很頭疼的

db.runCommand( { collMod: "log_events",     ---集合名 
                index: { keyPattern: { createTime: 1 },     ---createTime為具有TTL索引的字段名 
                          expireAfterSeconds: 7200          ---修改后的過期時間(秒) 
                        }}) 
  • 1
  • 2
  • 3
  • 4

expireAt的好處在於,可以指定在什么時間過期,對於數據量大的服務器來說,白天如果大量數據過期,在一定程度上會增加負載,因而選擇在閑時,或者夜里過期,是一個比較明智的做法。

 

db.httpRequestLog.ensureIndex({"requestTime": 1},{expireAfterSeconds: 2592000})

 

 

 


免責聲明!

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



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