mongodb 里面的TTL索引

曾经我也是靠脸吃饭的,后来差点饿死了…

 

TTL索引概念

TTL 索引提供了一个过期机制,允许为每一个文档设置一个过期时间 expireAfterSeconds ,当一个文档达到预设的过期时间之后就会被删除。TTL 索引除了有 expireAfterSeconds 属性外,和普通索引一样。

 

应用:

数据过期对于某些类型的信息很有用,比如机器生成的事件数据、日志和会话信息,这些信息只需要在数据库中保存有限的时间。

 

原理:

  • MongoDB 会开启一个后台线程读取该 TTL 索引的值来判断文档是否过期,但不会保证已过期的数据会立马被删除,因后台线程每 60 秒触发一次删除任务,且如果删除的数据量较大,会存在上一次的删除未完成,而下一次的任务已经开启的情况,导致过期的数据也会出现超过了数据保留时间 60 秒以上的现象。
  • 对于副本集而言,TTL 索引的后台进程只会在 Primary 节点开启,在从节点会始终处于空闲状态,从节点的数据删除是由主库删除后产生的 oplog 来做同步。

 

限制:

  • TTL 索引是单字段索引。复合索引不支持 TTL
  • _id字段不支持 TTL 索引。
  • 无法在上限集合(Capped Collection)上创建 TTL 索引,因为 MongoDB 无法从上限集合中删除文档。
  • 如果某个字段已经存在非 TTL 索引,那么在该字段上无法再创建 TTL 索引。

 

posted @ 2022-11-18 09:08  方达达  阅读(14)  评论(0编辑  收藏  举报