Mongodb设置TTL索引自动清除数据与过期数据的方法

  

Mongodb通常会被用来存储缓存数据或大尺寸,低价值的数据,对于这些类型的数据,数据量往往非常大,如果不定期清理,不但会影响性能,也会浪费大量的系统资源。

  

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

  

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

  

<>强创建TTL索引方法:

  

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

  

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

        db.log_events。方法createIndex ({“createTime”: 1} - - -字段名称   {expireAfterSeconds: 60 * 60}) - - -过期时间(单位秒)      
  

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

     

<>强修改TTL索引的expireAfterSeconds属性值:

  

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

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

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

  

方法如下:

  

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

  

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

        db.log_events。方法createIndex ({“expireTime”: 1} - - -字段名称   {expireAfterSeconds: 0}) - - -过期时间(单位秒)      db.log_events。插入({   “expireTime”:新的日期(2019年1月22日23:00:00)——插入文档时指定自动删除时间   “logEvent”: 2   “logMessage”:“成功!”})      

使用spring-data-mongodb 2.0.9中的

        文档文件=新文档();   document.append (" createTime ", 1);   IndexOptions IndexOptions=new IndexOptions ();   indexOptions.expireAfter (300 l, TimeUnit.SECONDS);   this.mongoTemplate.getCollection(“测试”).createIndex(文档,indexOptions);      

createTime是时间字段

  

使用spring-data-mongodb 1.7.0中的

        BasicDBObject bson=new BasicDBObject ();   bson.append (" createTime ", 1);   BasicDBObject选项=new BasicDBObject ();   options.append (“expireAfterSeconds ", 7200);   this.mongoTemplate.getCollection(“测试”).createIndex (bson、期权);      

<强>总结

  

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

Mongodb设置TTL索引自动清除数据与过期数据的方法