阿飞
阿飞
发布于 2025-08-04 / 15 阅读
0
0

TimescaleDB压缩策略+自动清理历史数据

本文补充了TimescaleDB的压缩策略 + 自动清理历史数据,适用于物联网场景,确保:

  • 老数据不浪费空间(压缩)

  • 极旧数据自动清理(节省存储)


🧩 第一步:压缩策略

TimescaleDB 支持对老数据块压缩(列式压缩),性能和存储都更优。

添加以下内容到你之前的 init/init_timescale.sql 文件末尾:

-- ✅ 启用 sensor_data 的压缩(压缩策略:按时间倒序)
ALTER TABLE sensor_data
  SET (timescaledb.compress, timescaledb.compress_orderby = 'time DESC');

-- ✅ 设置压缩策略:自动压缩 7 天前的数据
SELECT add_compression_policy('sensor_data', INTERVAL '7 days');

🧹 第二步:自动清理超旧数据(Retention Policy)

TimescaleDB 支持自动删除超出保留时间的数据块。
添加以下 SQL 到同一个文件末尾:

-- ✅ 删除 90 天前的数据(按时间字段)
SELECT add_retention_policy('sensor_data', INTERVAL '90 days');

这意味着:

  • 数据保留 90 天;

  • 超出 7 天的数据会被压缩;

  • 超出 90 天的压缩块会自动删除。


🧪 流程概览

                ┌──────────────┐
                │ 近期原始数据 │ ← 最近 7 天,未压缩
                └─────┬────────┘
                      ↓
                ┌──────────────┐
                │ 7~90 天数据  │ ← 自动压缩(节省存储)
                └─────┬────────┘
                      ↓
                ┌──────────────┐
                │ 90 天以前数据│ ← 自动删除
                └──────────────┘

✅ 现在,你的 TimescaleDB 实现了:

  • 自动建表并转为 Hypertable

  • 写入测试数据

  • 连续聚合

  • 自动聚合刷新

  • 自动压缩历史数据

  • 自动清理超期数据


📦 额外提示(选读)

如果你想手动触发压缩:

SELECT compress_chunk('_timescaledb_internal._hyper_1_1_chunk');

查询已压缩的块:

SELECT * FROM timescaledb_information.compressed_chunk_stats;


评论