MongoDB TTL索引的实例详解

  • 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索引治理-索引的创立、查看、删除操作详解

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: