压缩与保留策略
使用 TimescaleDB 的列式压缩压缩旧分块,并自动删除已过期的分块
压缩与保留策略 是 CoddyKit 上的免费 SQL Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 SQL Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 SQL Academy 课程共包含 4 节课。
为什么要压缩
时间序列数据具有很高的可压缩性。TimescaleDB 会以列式形式压缩数据块,通常可以达到 10–20 倍的压缩比。
压缩超表
配置哪些列用于分段,以及压缩数据的排序方式:
ALTER TABLE metrics SET (
timescaledb.compress,
timescaledb.compress_segmentby = 'device_id',
timescaledb.compress_orderby = 'ts DESC'
);压缩策略
自动压缩旧数据块:
SELECT add_compression_policy('metrics', INTERVAL '7 days');
-- Chunks older than 7 days get compressed automatically.压缩数据上的查询性能
对压缩数据块的读取仍然很快——TimescaleDB 会将过滤条件下推到列存储中。对压缩数据块的写入和更新受到限制,主要适合追加操作。
保留策略
删除早于 N 个时间间隔的数据——删除数据块很快,而 DELETE 很慢:
SELECT add_retention_policy('metrics', INTERVAL '90 days');
-- Chunks older than 90 days are dropped automatically.手动操作数据块
探索数据块:
SELECT * FROM chunks_detailed_size('metrics');
SELECT show_chunks('metrics', older_than => INTERVAL '90 days');
SELECT drop_chunks('metrics', older_than => INTERVAL '90 days');存储分层
通过更改每个数据块的表空间,将旧数据块移动到较慢的磁盘。结合压缩后,您可以以较低成本保留多年的数据。
实际压缩比
传感器数据的典型压缩比:
- 数值指标:节省 90–95% 以上的空间
- 分类数据:70–80%
- 字符串/JSON:取决于内容
为更新解压数据
您可以先解压数据块以更新旧数据,然后再重新压缩:
SELECT decompress_chunk(c) FROM show_chunks('metrics', newer_than => INTERVAL '60 days') c;
-- Update / fix
SELECT compress_chunk(c) FROM show_chunks('metrics', newer_than => INTERVAL '60 days') c;普通 PostgreSQL 中的等价方案
不使用 TimescaleDB 时,您可以通过分区自行实现类似功能:
DROP TABLE events_2022; -- retention (fast)
-- No native columnar compression in vanilla Postgres for time-series.与连续聚合结合使用
常见模式是:保留 30 天原始数据、保留 1 年的小时级聚合,并永久保留日级聚合。每一层都根据需要进行压缩或设置保留策略。
监控
跟踪压缩后的大小和压缩比:
SELECT * FROM hypertable_compression_stats('metrics');总结
压缩加保留策略可以让 PostgreSQL 成为功能完善的时间序列存储。
- 将旧数据块压缩 10–20 倍
- 保留策略可以立即删除数据块
- 针对不同的保留期限,分层保留原始数据、小时级聚合和日级聚合
- 需要时解压数据块以进行回填
快速检查
您希望保留 7 天的原始指标,并自动删除更早的所有数据。TimescaleDB 的正确做法是什么?
用 AI 导师学习 SQL — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 46
- 课程
- 183
常见问题解答
「压缩与保留策略」课时是免费的吗?
是的 — 「压缩与保留策略」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 SQL Academy 课程的其余内容,请升级到 CoddyKit PRO。 SQL Academy 课程共包含 4 节课。
「压缩与保留策略」这节课中我会学到什么?
使用 TimescaleDB 的列式压缩压缩旧分块,并自动删除已过期的分块 你通过在浏览器中直接运行的动手代码来练习 SQL Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 SQL Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 SQL Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「压缩与保留策略」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 SQL Academy 课中编写并运行代码吗?
能。每节 SQL Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- TimescaleDB 超表
- 连续聚合
- 压缩与保留策略
- 时间序列索引选择