- A+
所属分类:MongoDB
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索引不支撑基于多个字段的复合索引 不支撑定长聚拢
二、TTL索引示例
# mongo --shell localhost:27000 TTLData.js MongoDB shell version: 3.2.11 connecting to: localhost:27000/test repSetTest:PRIMARY> addTTLTestData() //添加聚拢数据 Create three records in database each with a create time that is 1 minute apart Created three test documents, oldest being 4 mins old Now create a TTL index with expiry of 5 mins on the createDate field as follows db.ttlTest.ensureIndex({createDate:1}, {expireAfterSeconds:300}) repSetTest:PRIMARY> db.ttlTest.find() //当前向聚拢里插入了3个文档 { "大众_id"大众 : 1, "大众createDate"大众 : ISODate("大众2017-03-10T03:23:01.169Z"大众) } { "大众_id"大众 : 2, "大众createDate"大众 : ISODate("大众2017-03-10T03:24:01.169Z"大众) } { "大众_id"大众 : 3, "大众createDate"大众 : ISODate("大众2017-03-10T03:25:01.169Z"大众) } //下面为测试聚拢上的文档添加索引,即5分钟后索引失效 repSetTest:PRIMARY> db.ttlTest.createIndex({createDate:1}, {expireAfterSeconds:300}) { "大众createdCollectionAutomatically"大众 : false, "大众numIndexesBefore"大众 : 1, // Author : Leshami "大众numIndexesAfter"大众 : 2, // Blog : http://blog.csdn.net/leshami "大众ok"大众 : 1 } //查找文档 repSetTest:PRIMARY> db.ttlTest.find() { "大众_id"大众 : 1, "大众createDate"大众 : ISODate("大众2017-03-10T03:23:01.169Z"大众) } { "大众_id"大众 : 2, "大众createDate"大众 : ISODate("大众2017-03-10T03:24:01.169Z"大众) } { "大众_id"大众 : 3, "大众createDate"大众 : ISODate("大众2017-03-10T03:25:01.169Z"大众) } //当指准时间到期后,文档被删除,如下,查询不到任何文档 repSetTest:PRIMARY> db.ttlTest.find()
您可能感兴致的文章:
MongoDB索引使用详解MongoDB的根基查询和索引操作办法总结MongoDB机能篇之创立索引,组合索引,独一索引,删除索引和explain执行方案MongoDB中创立索引必要注意的事变pymongo给mongodb创立索引的简单实现办法MongoDB查询字段没有创立索领导致的衔接超时非常解案例分享MongoDB进修条记(六) MongoDB索引用法和效力阐发mongodb处置中文索引与查找字符串详解pymongo为mongodb数据库添加索引的办法MongoDB数据库中索引(index)详解Mongodb索引的优化MongoDB入门教程之索引操作浅析MongoDB教程之索引先容MongoDB的索引MongoDB数据库中索引和explain的使用教程mongodb索引常识_动力节点Java学院整顿基于MongoDB数据库索引构建环境周全阐发关于MongoDB索引治理-索引的创立、查看、删除操作详解