時間:2024-03-08 08:50作者:下載吧人氣:23
MongoDB TTL索引的實例詳解
TTL索引是一種特殊類型的單字段索引,主要用于當滿足某個特定時間之后自動刪除相應的文檔。也就是說集合中的文檔有一定的有效期,超過有效期的文檔就會失效,會被移除。也即是數據會過期。過期的數據無需保留,這種情形適用于如機器生成的事件數據,日志和會話信息等等。本文主要描述TTL索引的使用。
一、TTL索引
創建方法 db.collection.createIndex(keys, options) options: expireAfterSeconds 指定多少秒或者包含日期值的數組 創建示例 db.eventlog.createIndex( { "lastModifiedDate": 1 }, { expireAfterSeconds: 3600 } ) 何時失效 在指定的時間達到后失效,也即是索引字段的值加上一個特定的秒數之后 如果索引字段是一個數組,即索引字段上存在著多個日期值,此時MongoDB取最小值加上失效時間(lowest()) 對于非日期字段或不包含日期數組的索引字段,文檔不會失效 對于不包含索引字段的文檔,文檔不會失效 刪除操作 mongod的一個后臺線程會讀取索引的值并將失效的文檔從集合移除 當TTL線程被激活后,可以從db.currentOp()或者從profile觀察到刪除操作 何時刪除 當基于后臺方式創建索引時,TTL線程能夠在索引創建期間開始刪除失效文檔 當基于前臺方式創建索引時,TTL線程在索引創建完成后開始刪除失效文檔 TTL索引的刪除不能完全保證失效期后一定刪除,存在一定延遲(取決于mongod的工作負載) TTL刪除文檔后臺線程每60s移除失效文檔(因此可能存在已過失效期,文檔還在的情形) 在副本集環境中,TTL后臺線程僅僅在主副本上工作,輔助副本上由復制操作實現 在使用TTL索引查詢時,與使用非TTL索引一樣 一些限制 不能基于已經存在索引的字段創建TTL索引以及非日期字段創建TTL索引,文檔不會失效 TTL索引不支持基于多個字段的復合索引 不支持定長集合
網友評論