MongoDB TTL索引的实例详解

栏目: 数据库 · MongoDB · 发布时间: 6年前

内容简介:这篇文章主要介绍了 MongoDB TTL索引的实例详解的相关资料,希望通过本文能帮助到大家,让大家理解掌握这部分内容,需要的朋友可以参考下

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 TTL索引的实例详解》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Impractical Python Projects

Impractical Python Projects

Lee Vaughan / No Starch Press / 2018-11 / USD 29.95

Impractical Python Projects picks up where the complete beginner books leave off, expanding on existing concepts and introducing new tools that you’ll use every day. And to keep things interesting, ea......一起来看看 《Impractical Python Projects》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具