成本构成与优化顺序
存储成本由容量、副本数、计算资源与网络流量共同构成,通常容量与副本占大头。优化顺序建议按数据生命周期从大到小推进:先做压缩与编码,再做冷热分层与到期清理,最后精简副本与分片数。动手前先按表或索引量化单位成本与增长趋势,否则很容易优化了不占空间的那部分数据。
基本信息
| 容量 | 原始数据量 × 压缩率 × 副本数 ×(1 + 索引放大) |
|---|---|
| 压缩与编码 | 列式库可按列选编码(LowCardinality、Delta、ZSTD),压缩等级越高 CPU 开销越大 |
| 冷热分层 | 过期数据下沉到低成本存储:搜索快照、低配卷、对象存储 |
| 副本策略 | 按可用性要求定副本数,搜索与日志类常见单副本加强制快照 |
| 到期清理 | TTL 与生命周期策略按合规与业务价值设置保留期 |
| 可观测 | 按表与索引维度采集占用与增长指标,支撑预算与扩容 |
典型使用场景
- 磁盘告警后的定位:先找出占用最大的表或索引,再决定动刀对象
- 日志类数据治理:按保留期分层,热数据保精度、冷数据降精度
- 索引瘦身:删除长期未命中的索引,写入放大与容量同时下降
- 备份策略调整:全量备份频率与保留份数直接影响对象存储费用
- 预算评审:按租户或业务线归集占用,让成本可分摊可问责
压缩与占用定位(ClickHouse 示例)
压缩与占用定位(ClickHouse 示例)
-- 低基数列改字典编码,通常可显著缩小体积
ALTER TABLE logs.events MODIFY COLUMN service LowCardinality(String);
-- 有序数值列用差分编码叠加 ZSTD
ALTER TABLE logs.events MODIFY COLUMN value CODEC(Delta, ZSTD(3));
-- 按表查看磁盘占用,定位优化目标
SELECT table, formatReadableSize(sum(bytes_on_disk)) AS size, sum(rows) AS rows
FROM system.parts WHERE active
GROUP BY table ORDER BY sum(bytes_on_disk) DESC LIMIT 10;
-- 分区级保留:让过期分区按时自动清理
ALTER TABLE logs.events MODIFY TTL ts + INTERVAL 90 DAY;优化手段与收益
| 手段 | 主要收益 | 代价与前提 |
|---|---|---|
| 列编码优化 | 容量下降,查询读取字节减少 | 高压缩等级增加 CPU 与解压时间 |
| 冷热分层 | 长期容量成本显著下降 | 冷查询延迟上升,需要查询侧配合 |
| 到期清理 | 切断无限增长,控制长期成本 | 保留期需与合规及业务需求对齐 |
| 副本精简 | 容量与写入放大成比例下降 | 可用性降低,必须配合可靠备份 |
| 索引精简 | 写入放大下降,占用减少 | 删除前要用慢查询日志确认无依赖 |
压缩率与查询开销需要平衡:报表类查询对延迟敏感时先小范围对比不同编码与等级,再决定推广,不要一次性全表改配置。
删除索引与缩短保留期都是不可逆动作:先确认没有查询依赖、备份仍在有效期内,再执行,并保留一份变更记录。