MongoDB 自动删除过期数据

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

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

TTL 索引

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

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

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

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

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

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

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

TTL 索引机制

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

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


作者:我妻礼弥
来源:掘金

  • 发表于 2021-03-26 18:47
  • 阅读 ( 53 )

0 条评论

请先 登录 后评论
z老师
z老师

131 篇文章

作家榜 »

  1. NX小编 1251 文章
  2. 58沈剑 325 文章
  3. 热爱技术的小仓鼠 230 文章
  4. 奈学教育 154 文章
  5. z老师 131 文章
  6. 五十三 58 文章
  7. 李希沅 | 奈学教育 52 文章
  8. 江帅帅 | 奈学教育 32 文章