MongoDB 自动删除过期数据

MongoDB 自动删除过期数据在 MongoDB 中可以使用 TTL 索引实现在指定的时间或者一段时间后自动删除”过期”文档。 TTL 索引是 MongoDB 中一种特殊的单字段索引,其中字段类型必须是 ISODate 类型或者包含有 ISODate类型的数组。 如果索引字段是数组,并且字段中有多个日期值,…

在 MongoDB 中可以使用 TTL 索引实现在指定的时间或者一段时间后自动删除”过期”文档。

TTL 索引

TTL 索引MongoDB 中一种特殊的单字段索引,其中字段类型必须是 ISODate 类型或者包含有 ISODate类型的数组。

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

db.collection名称.createIndex( { "ISODate类型的字段": 1 }, { expireAfterSeconds: 过期时间,单位秒 }, { background: true }  )
  • 如果索引字段是数组,并且字段中有多个日期值,则 MongoDB 使用数组中即最早的日期值来计算到期阈值。

  • 如果文档中的索引字段不是 ISODate 类型或者包含有 ISODate类型的数组,则该文档不会过期。

  • 如果文档不包含索引字段(错误指定索引字段),则该文档不会过期。

另外,如果将 expireAfterSeconds 值设为 0,则过期时间由索引字段的时间来决定。通过这个特性你可以在你的集合中加入一个ISODate类型的字段,插入过期时间并指定它为 TTL 索引字段,来间接实现在指定时间过期。

和其他索引一样,TTL 索引也支持查询优化

TTL 索引机制

当你给集合中某一个字段建立 TTL 索引后,后台会启一个线程,不断查询(默认 60s 一次)索引的值来判断文档是否过期,如果过期,则删除,但是删除动作可能不会立即执行,需要依据 mongo 实例的负载情况,如果负载很高,可能会稍微延后一段时间再删除。

还有一个需要注意的地方,在副本集群中,只有主节点 才会启动 TTL 后台线程,如果此实例变为 副本节点 ,则后台线程闲置

今天的文章MongoDB 自动删除过期数据分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/20036.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注