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索引自动清除数据与过期数据的方法