一 簡介:本文介紹創建自動刪除數據的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