1. 程式人生 > >mongodb系列~mongodb定時刪除資料

mongodb系列~mongodb定時刪除資料

一 簡介:本文介紹建立自動刪除資料的TTL索引

二 目的 定時刪除資料
三 建立方法
   db.collection.createIndex(keys, options)
   options:
   expireAfterSeconds 指定多少秒或者包含日期值的陣列

   建立示例
   db.eventlog.createIndex( { "lastModifiedDate": 1 }, { expireAfterSeconds: 3600 },{backgroup: true})

四 何時失效
   1 在指定的時間達到後失效,也即是索引欄位的值加上一個特定的秒數之後
   2 如果索引欄位是一個數組,即索引欄位上存在著多個日期值,此時MongoDB取最小值加上失效時間(lowest())
   3  對於非日期欄位或不包含日期陣列的索引欄位,文件不會失效
   4  對於不包含索引欄位的文件,文件不會失效

五 刪除操作
   1 mongod的一個後臺執行緒會讀取索引的值並將失效的文件從集合移除
   2 當TTL執行緒被啟用後,可以從db.currentOp()或者從profile觀察到刪除操作

六 何時刪除
   1 當基於後臺方式建立索引時,TTL執行緒能夠在索引建立期間開始刪除失效文件
   2 當基於前臺方式建立索引時,TTL執行緒在索引建立完成後開始刪除失效文件
   3 TTL索引的刪除不能完全保證失效期後一定刪除,存在一定延遲(取決於mongod的工作負載)
   4 TTL刪除文件後臺執行緒每60s移除失效文件(因此可能存在已過失效期,文件還在的情形)
   5  在副本集環境中,TTL後臺執行緒僅僅在主副本上工作,輔助副本上由複製操作實現
   6  在使用TTL索引查詢時,與使用非TTL索引一樣

七 一些限制
   1 不能基於已經存在索引的欄位建立TTL索引以及非日期欄位建立TTL索引,文件不會失效
   2 TTL索引不支援基於多個欄位的複合索引
   3 不支援定長集合
本文系轉載文章來源 https://blog.csdn.net/leshami/article/details/61195427