news 2026/9/11 22:26:03

Apache Doris 压缩算法怎么选:ZSTD、LZ4、Snappy 配置指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Apache Doris 压缩算法怎么选:ZSTD、LZ4、Snappy 配置指南

Apache Doris 压缩算法怎么选:ZSTD、LZ4、Snappy 配置指南

【免费下载链接】dorisApache Doris is a real-time analytics and hybrid search database for AI agents.项目地址: https://gitcode.com/GitHub_Trending/doris/doris

在 Apache Doris 中,压缩算法的选择直接决定两个数字:数据落到磁盘占多少空间,以及查询读回时多花多少毫秒。生产上可选的其实是三选一——ZSTD、LZ4、Snappy,一句话原则是:为存储成本选 ZSTD,为查询速度选 LZ4。下文先给出三者的定位,再按"集群默认 → 单表覆盖 → 效果验证"讲配置路径,最后给两条可执行的判断规则。

Doris 压缩算法对比:三种定位各占一席

Doris 的列存按数据块粒度压缩:一列数据先编码,再经过压缩编解码器写入磁盘,底层接口在 be/src/util/block_compression.h。三种算法的差异在于压缩率与 CPU 开销的取舍:

算法压缩率档位压缩速度解压速度典型定位
ZSTD高(约 1.5~3 倍)中快大体积、少更新的数据
LZ4中(约 1.2~1.8 倍)热数据、高频查询
Snappy低(约 1.1~1.5 倍)低压缩性的日志类数据

ZSTD 是省存储的主力。压缩率明显高于另外两者,且数据量越大优势越明显;代价是压缩时 CPU 开销最高,不适合毫秒敏感的实时写入链路,更适合历史分区、离线报表这类"一次写入、多次读取"的位置。

LZ4 是查询速度的均衡解。压缩和解压都快,解压开销在多数场景可忽略。点查 QPS 高、延迟敏感、写入端 CPU 已经吃紧时,LZ4 是热数据分区的首选。

Snappy 是低压缩性数据的兜底。压缩率三者最低,但速度不输 LZ4,工程上最省心。日志、文本、随机序列这类本身可压缩性差的数据,硬上 ZSTD 不会多省多少空间,只会多烧 CPU,Snappy 更合适。

storage_compression_method 配置:默认值、单表覆盖、验证

配置分三层,后者覆盖前者,按顺序做:

  1. 集群默认:在 conf/be.conf 中指定新数据的全局默认算法,不配置时默认为 LZ4。
# conf/be.conf,可选 ZSTD / LZ4 / SNAPPY storage_compression_method = ZSTD
  1. 单表覆盖:建表时用PROPERTIES里的compression指定单表算法,优先级高于集群默认;可选枚举可对照 gensrc/proto/segment_v2.proto(含 ZSTD、LZ4、LZ4F、ZLIB、SNAPPY、LZ4HC 等)。
CREATE TABLE user_behavior ( user_id BIGINT, action STRING, event_time DATETIME ) PROPERTIES ("compression" = "LZ4");
  1. 效果验证:数据落盘后,用information_schema.partitions_meta算实际压缩比,用数字代替感觉。
SELECT table_name, ROUND(SUM(data_size) / SUM(data_size_compressed), 2) AS ratio FROM information_schema.partitions_meta GROUP BY table_name ORDER BY ratio DESC;

⚠️ 压缩算法只作用于新写入的数据。存量数据不会自动重压,需要重建分区或备份恢复后重写。

Doris 压缩率选型:只看两个变量

不用画流程图,按顺序问两个问题:

  1. 更新频率:同一分区是否每天被反复修改?
    • 一次写入、基本不再更新 →ZSTD,用 CPU 换空间。
    • 频繁 update/delete,数据长期"半热" →LZ4,重写 segment 的开销要尽量低。
  2. 查询压力:这张表的读 QPS 是否上千且延迟敏感?
    • 是 →LZ4,解压几乎不占 CPU,读路径上限更稳。
    • 否(报表、离线分析) →ZSTD,解压多花几毫秒,省下的空间更值。
    • 数据本身可压缩性差(日志、随机串) →Snappy,ZSTD 在这里烧 CPU 也换不来空间。

拿不准就用 LZ4:它贴近 Doris 的默认方向,两边都不会错得太远。

真实场景与上线前避坑

案例(示例数据):某电商的用户行为日志表,约 20TB,Snappy 下实测压缩比 1.3 倍;切 ZSTD 并重建分区后升到约 2.7 倍,存储占用减少约一半,夜间报表窗口 CPU 占用上升,但整体耗时反而缩短约 15%(IO 减少所致)。这组数字仅供量级参考,实际比率完全取决于你的数据可压缩性。

避坑清单

  • 改算法不追溯存量,必须重写分区,选在业务低峰执行。
  • 重建前先备份,新算法不符合预期(如 ZSTD 把导入 CPU 打满)可以回退。
  • 不要全集群一种算法:热分区 LZ4、冷分区 ZSTD,按表配置比全局默认更稳。
  • 切换前抽样测试,以partitions_meta里的真实比率做决策,而不是表格里的估算值。

上线前检查清单

  • conf/be.confstorage_compression_method与预期默认一致,需要差异化的表已设PROPERTIES
  • 抽样 1~2 张代表表,在partitions_meta核对实际压缩比。
  • 存量分区:备份已完成,重建排在低峰窗口。
  • 上线后观察 24 小时导入 CPU 与查询 P99,并保留回退方案。

【免费下载链接】dorisApache Doris is a real-time analytics and hybrid search database for AI agents.项目地址: https://gitcode.com/GitHub_Trending/doris/doris

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/11 22:24:48

Maestro record 上手:1 条命令产出 1080p 测试演示视频

Maestro record 上手:1 条命令产出 1080p 测试演示视频 【免费下载链接】Maestro Painless E2E Automation for Mobile and Web 项目地址: https://gitcode.com/GitHub_Trending/ma/Maestro 发版评审、给开发提 bug 报告,你多半都遇到过这种事&am…

作者头像 李华
网站建设 2026/9/11 22:22:52

中国植被栅格数据的完整处理流程:从ArcGIS到MaxEnt建模

简介:覆盖中国范围的植被类型GIS数据,面向GIS分析师、生态科研与林业规划人员,可直接用于植被分布制图、空间分析与MaxEnt生态位建模。数据基于遥感解译与野外调查整合,涵盖森林、草原、荒漠、湿地等主要植被类型,可作…

作者头像 李华
网站建设 2026/9/11 22:22:20

华为云Flexus X:柔性算力架构解析与应用实践

1. 柔性算力技术背景与行业痛点在数字化转型浪潮中,企业面临的最大挑战之一就是算力需求与硬件资源之间的动态平衡问题。传统数据中心采用固定配置的服务器集群,就像用固定尺寸的集装箱运输货物——当业务负载波动时,要么资源闲置造成浪费&am…

作者头像 李华
网站建设 2026/9/11 22:17:45

Kafka KRaft模式部署与优化实践

1. Kafka KRaft模式部署专业方案(上) 最近在帮一家金融科技公司搭建消息队列系统,他们要求高可用、低延迟且不能依赖ZooKeeper。经过技术选型,最终决定采用Kafka KRaft模式部署方案。这个方案最大的特点就是去除了ZooKeeper依赖&a…

作者头像 李华
网站建设 2026/9/11 22:17:12

多重填补法原理与实战:从缺失值处理到R/Python实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华