Mongodb - TTL(time to live)特性
2016-03-11 09:22 abce 阅读(8277) 评论(0) 编辑 收藏 举报TTL集合支持mongodb对存储的数据进行失效时间设置,经过指定的时间段后、或在指定的时间点过期,集合自动被mongod清除。这一特性有利于对一些只需要保存一定时间的数据信息进行存储,比如机器产生的事件数据、日志、会话信息等。
Mongodb使用TTL索引特性来实现TTL集合。TTL通过一个后台线程读取索引中数据类型的值,然后清除过期的集合。
集合中的文档超过expireAfterSeconds关键字定义的时间后,该文档就变得过期了,会被自动删除。在创建TTL索引的时候,需要使用到关键字expireAfterSeconds,索引中对应的field的值的类型必须是date,或者对应的array包含date类型的值。
只能对单列索引创建TTL索引,组合索引不能是TTL索引。
1.经过指定的时间间隔后,集合失效
1 2 3 4 5 6 7 8 9 10 11 12 13 | > db.log_events.createIndex({ "createdAt" : 1},{expireAfterSeconds: 180}) #5分钟后过期 #插入文档 > db.log_events. insert ({ "createdAt" : new Date (), "logEvent" : 2, "logMessage" : "Success!" }) #查看 > db.log_events.find() { "_id" : ObjectId( "56e219ecf694a8d2cff60cca" ), "createdAt" : ISODate( "2016-03-11T01:05:48.082Z" ), "logEvent" : 2, "logMessage" : "Success!" } #5分钟后再次查看(已被清除) > db.log_events.find() > |
2.指定时间点过期
将参数expireAfterSeconds设置为0,expireAt指定过期时间
1 2 3 4 5 6 7 | > db.ttl.createIndex({ "expireAt" : 1},{expireAfterSeconds:0}) #插入文档 > db.ttl. insert ({ "createdAt" : new Date ( 'Mar 11, 2016 09:30:00' ), "logEvent" : 2, "logMessage" : "Success!" }) |
使用TTL时是有限制的:
-如果要索引的字段已经在其他索引中使用,不能创建TTL索引
-索引不能包含多个字段
-如果定义的字段不存在,则永不过期
-不能对capped集合创建TTL索引
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)