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

