虚位以待(AD)
虚位以待(AD)
首页 > 数据库 > MongoDB数据库 > MongoDB TTL索引的实例详解

MongoDB TTL索引的实例详解
类别:MongoDB数据库   作者:码皇   来源:互联网   点击:

这篇文章主要介绍了 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.11connecting to: localhost:27000/testrepSetTest:PRIMARY> addTTLTestData() //添加集合数据Create three records in database each with a create time that is 1 minute apartCreated three test documents, oldest being 4 mins oldNow create a TTL index with expiry of 5 mins on the createDate field as followsdb.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索引管理-索引的创建、查看、删除操作详解
相关热词搜索: MongoDB TTL索引 MongoDB TTL索引的详解 M