首页/数据/NoSQL 速查/数据生命周期与 TTL 清理对照
选型与架构50 条

数据生命周期与 TTL 清理对照

过期数据主动清理能控制成本:MongoDB 用 TTL 索引后台周期删除,ES 用 ILM 分阶段下沉与删除,ClickHouse TTL 在合并时执行并支持冷热分层,Redis 键过期是惰性加定期清理。清理策略要与备份与合规要求对齐。

NoSQL 速查数据更新于 2026-10-13

数据生命周期与 TTL 是什么

过期数据主动清理是控制成本的常规手段:MongoDB 用 TTL 索引由后台周期删除,Elasticsearch 用 ILM 分阶段下沉与删除,ClickHouse 的 TTL 在合并时执行并支持冷热分层,Redis 键过期采用惰性加定期清理。清理策略要与备份和合规要求对齐:主库删掉但备份里仍保留的周期如果不一致,审计时会出现两边对不上的情况。

基本信息

MongoDBTTL 索引由后台线程周期扫描删除
ElasticsearchILM 分阶段下沉与删除
ClickHouseTTL 在合并时执行,支持分层到不同卷
Redis惰性删除加定期抽样清理
计时精度以上机制都是近似值,不是精确定时器

典型使用场景

  • 会话数据清理:给会话集合加 TTL 索引自动过期
  • 日志保留:按 ILM 策略把旧索引下沉并删除
  • 冷热分层:ClickHouse 把旧数据移到冷卷后再删除
  • 缓存过期:用 Redis 过期时间控制内存占用
  • 合规对齐:核对线上清理周期与备份保留周期

各库配置示例

各库配置示例
# MongoDB:创建 TTL 索引(后台线程周期扫描)
db.sessions.createIndex({ createdAt: 1 }, { expireAfterSeconds: 3600 })

# Redis:设置键过期
redis-cli EXPIRE session:1 1800

# InfluxDB:按桶的保留期自动清理
influx bucket update -n metrics -r 30d

清理机制对照

系统写法执行时机
MongoDBexpireAfterSeconds后台周期扫描
ElasticsearchILM 的 delete 阶段周期任务评估
ClickHouseMODIFY TTL ... DELETE合并时执行
RedisEXPIRE惰性加定期清理
InfluxDBbucket retention后台按桶清理
清理计时都是近似值:TTL 线程周期扫描、ClickHouse 依赖合并、ILM 由周期任务评估,都不适合当作精确的定时删除器。
大批数据在同一时间点集中到期会造成删除与合并压力,策略里应给时间加抖动。
备份保留周期要与线上清理对齐,主库已删除而备份仍留有合规数据时,两边口径会互相矛盾。
对合规要求较强的数据,清理动作本身最好留痕:谁在什么时候按什么策略删除了哪些范围,事后审计才有依据。
TTL 索引只针对单个日期类型字段生效,字段里混入非日期类型时该文档不会被清理,写入前要保证类型一致。

易错点

  • 大批数据在同一时间点集中到期会造成删除与合并压力,策略里给时间加抖动
  • 清理策略与备份保留周期不一致,合规审计时两边对不上
  • 把 TTL 当精确删除器用,业务依赖「到点即消失」会产生偶发脏读
  • ClickHouse 的 TTL 依赖合并,长期没有合并的静态表可能需要手动触发

数据来源与参考

  • MongoDB Manual: TTL indexes
  • Elasticsearch Guide: ILM
  • ClickHouse Docs: TTL
  • Redis Docs: EXPIRE
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌