• 五万球迷助阵 国安主场“摘花” 2019-05-24
  • 俄罗斯驻华大使:未来上合的首要任务是加强区域一体化 2019-05-23
  • 习近平总书记重要讲话在内蒙古各界引发热烈反响 2019-05-22
  • 女性之声——全国妇联 2019-05-21
  • 新华时评:美逆潮流而动,必将付出代价 2019-05-21
  • 好朋友、和平奖可能人家抱了。 2019-05-20
  • 【北京荣祥月达车型报价】北京荣祥月达综合店车型价格 2019-05-20
  • 脸上长痘代表对应内脏有问题?专家:未发现相关性 2019-05-19
  • 和静县首届东归节6月23日开幕 2019-05-18
  • 太空监视飞行器相关新闻 2019-05-18
  • 警车化身“产房” 冰雪路上“生命接力” 2019-05-17
  • 百部网络正能量动漫音视频作品评选 2019-05-16
  • 初二少年与家长争吵离家出走 客运站人员发觉异样后拦下 2019-05-15
  • 陈海滢的专栏作者中国国家地理网 2019-05-14
  • 乐平市:开展流动党校“培训在基层”活动(图) 2019-05-13
  • 香港赛马会55期:Mongodb设置TTL索引自动清除数据与过期数据的方法

    香港赛马会网站惠泽社绝杀八码 www.mwcrz.tw  更新时间:2019年03月16日 09:21:13   作者:CODETC   我要评论

    今天小编就为大家分享一篇关于Mongodb设置TTL索引自动清除数据与过期数据的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

    Mongodb通?;岜挥美创娲⒒捍媸莼虼蟪叽?、低价值的数据,对于这些类型的数据,数据量往往非常大,如果不定期清理,不但会影响性能,也会浪费大量的系统资源。

    Mongodb其实可以像Redis一样设置数据的过期时间,TTL索引是MongoDB中一种特殊的索引,可以支持文档在一定时间之后自动过期删除,目前TTL索引只能在单字段上建立。

    当你在集合中某一个字段建立TTL索引后,后台会有一个单线程,通过不断查询(默认60s一次)索引的值来判断document是否有过期,并且删除文档的动作还依据mongod实例的负载情况,如果负载很高,可能会稍微延后一段时间再删除。

    创建TTL索引方法:

    和普通索引的创建方法一样,只是会多加一个属性而已

    例:在log_events的集合中,createTime 字段上建立一小时后过期的TTL索引

    db.log_events.createIndex( { "createTime": 1 },   ---字段名称  
      { expireAfterSeconds: 60*60 } )         ---过期时间(单位秒)

    上例中creteTime字段类型必须是Date()类型

    修改TTL索引的expireAfterSeconds属性值:

    注:如果想更改过期时间expireAfterSeconds,可以使用collMod方法,要不然你只能只用dropIndex(),createIndex()方法重建索引了,但这样的方法在亿级数据量下是很头疼的

    db.runCommand({ collMod: "log_events",     ---集合名 
      index: { keyPattern: { createTime: 1 },   ---createTime为具有TTL索引的字段名 
      expireAfterSeconds: 7200          ---修改后的过期时间(秒) 
      }})

    虽然上面的方法可以实现自动过期删除,但是如果白天业务很忙,频繁的删除数据势必会增加负载,所以我想着晚上定时删除过期数据(如果晚上业务量少的话)

    方法如下:

    增加一个expireTime字段(用于指定过期时间),expireAfterSeconds属性值设置为0,

    注:上面的createTime字段就不需要再有TTL索引了,这个expireTime的时间就需要在插入时指定上

    db.log_events.createIndex( { "expireTime": 1 },   ---字段名称 
      { expireAfterSeconds: 0 } )           ---过期时间(单位秒)
    
    db.log_events.insert( { 
     "expireTime": new Date('Jan 22, 2019 23:00:00'), ---插入文档时指定自动删除时间 
     "logEvent": 2, 
     "logMessage": "Success!"} ) 

    使用spring-data-mongodb 2.0.9中的

    Document document = new Document();
    document.append("createTime",1);
    IndexOptions indexOptions = new IndexOptions();
    indexOptions.expireAfter(300L,TimeUnit.SECONDS);
    this.mongoTemplate.getCollection("test").createIndex(document,indexOptions);

    createTime是时间字段

    使用spring-data-mongodb 1.7.0中的

    BasicDBObject bson = new BasicDBObject();
          bson.append("createTime",1);
    BasicDBObject options = new BasicDBObject();
    options.append("expireAfterSeconds",7200);
          this.mongoTemplate.getCollection("test").createIndex(bson,options);

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

    相关文章

  • MongoDB导出查询结果到文件例子

    MongoDB导出查询结果到文件例子

    这篇文章主要介绍了MongoDB导出查询结果到文件例子,本文直接给出示例代码,简洁易懂,需要的朋友可以参考下
    2015-02-02
  • 最新评论

    常用在线小工具

  • 五万球迷助阵 国安主场“摘花” 2019-05-24
  • 俄罗斯驻华大使:未来上合的首要任务是加强区域一体化 2019-05-23
  • 习近平总书记重要讲话在内蒙古各界引发热烈反响 2019-05-22
  • 女性之声——全国妇联 2019-05-21
  • 新华时评:美逆潮流而动,必将付出代价 2019-05-21
  • 好朋友、和平奖可能人家抱了。 2019-05-20
  • 【北京荣祥月达车型报价】北京荣祥月达综合店车型价格 2019-05-20
  • 脸上长痘代表对应内脏有问题?专家:未发现相关性 2019-05-19
  • 和静县首届东归节6月23日开幕 2019-05-18
  • 太空监视飞行器相关新闻 2019-05-18
  • 警车化身“产房” 冰雪路上“生命接力” 2019-05-17
  • 百部网络正能量动漫音视频作品评选 2019-05-16
  • 初二少年与家长争吵离家出走 客运站人员发觉异样后拦下 2019-05-15
  • 陈海滢的专栏作者中国国家地理网 2019-05-14
  • 乐平市:开展流动党校“培训在基层”活动(图) 2019-05-13