GH GambleHub

压缩分析数据

1)为什么压缩分析

压缩减少了存储量和流量,通过更小IO和更好的缓存加快了扫描速度。价格-CPU和(有时)更新的复杂性。目标是SLO下的"IO↔CPU↔tochnost↔stoimost"最佳。

基本指标:
  • Compression Ratio (CR) = `raw_size / compressed_size`.
  • Scan Cost ≈ bytes_scanned / throughput_storage + cpu_decode_time`.
  • Total Cost = `storage_cost + compute_cost + egress_cost`.

2)压缩存在的图层

1.在格式级别:Parquet/ORC/Avro(页面/strips/扬声器)。
2.在编码级别,专栏:词典,RLE,Delta,FoR/Bit-packing,Gorilla/XOR。
3.编解码器级别:ZSTD,Snappy,LZ4,Gzip。

4.在查询/引擎级别: 矢量化,页面跳过(min/max), bloom/zone-map.

5.在存储级别:分层存储(hot/warm/cold),复合,页面缓存。


3)柱形格式及其优点

Parquet:按列排列的页面;支持字典,RLE/Bit-packing,min/max统计和null计数。
ORC: strips with index on strims, bloom过滤器;对长扫描有效。
Avro (row):便于流媒体/博客,分析扫描更糟糕。

实践:对于默认分析,请使用Parquet/ORC,在基数低/中位数时包括色谱和字典。


4)扬声器(lossless)

字典:用索引替换值(对于低基数而言是理想的)。
RLE (Run-Length编码):重复的→值(value, run)。适合排序/聚类扬声器。
Delta/Delta of Delta:存储差异(数字/时间)。
FoR(参考框架)+位包:值=base+offset;offset装有N位。
大猩猩/XOR(时间系列):以可变长度存储相邻值的XOR;对指标有好处。
Nullable-bitmask:单独的null流增加CR。

提示:通过过滤密钥进行预聚类/分类大大改善了RLE/zone-maps和CR。


5)通用编解码器

ZSTD:CPU价格适中的最佳CR;支持1-22级别。通用选择。
Snappy:快速,低CR;适用于高读取率的热数据。
LZ4:Snappy更快,类似于CR;通常-用于流/登录/缓存。
Gzip/Deflate:高CR,高CPU价格;在交互式分析中很少有理由。

规则:热层-Snappy/LZ4,温暖/寒冷-ZSTD(3-7级)。


6)时间序列和徽标

TSDB/柱状 DB:大猩猩/XOR,Delta-RLE-Bitmap,Sparse-run用于稀有信号。
Logi: JSON→Parquet+ZSTD;使密钥和类型正常化(不要存储"字符串int")。
Downsampling和roll-ups (lossy):将单元存储在热层中的窗口(1m/5m/1h);生的-在寒冷中。
素描结构:HLL(基数),TDigest/KLL(分数),CMS(频率)-紧凑但近似。


7)Lossless vs Lossy(当可能失去准确性时)

Lossless-报告,财务和审计。
Lossy-监视,大窗口上的A/B分析,遥测(带有明显的标记!)。
质量控制:设置允许的误差(例如P99 ± 0。5 pp)并在CI中检查。


8)参与,页面和复合

分期付款:按日期/地区/tenant →少扫描,优于CR。
页面大小/突击:每页64-256 KB,每文件64-512 MB-seek和CPU之间的平衡。
编译:合并小文件(小文件问题)-高于CR和速度。
Zone-maps/Bloom:加快页面跳过;对过滤器进行排序是有效的。


9)压缩和加密/隐私

操作顺序:首先是压缩,然后是加密。否则CR ≈ 1。
TDE/at rest不会干扰CR(已压缩单元已加密)。
Transit(TLS)不会影响格式。
压缩前的PII掩蔽/令牌化使熵保持可控。
小心OPE/DET加密:可能会降低CR和/或冒隐私风险。


10)成本和SLO(经济)

Storage:少于字节→低于$/TB-mo。
计算:IO更少→扫描速度更快;但是减压浪费了CPU。
Egress:少于字节→少于流量/拷贝时间。
SLO折衷:选择编解码器/层,以便"p95_latency"保留在目标窗口中。

策略示例(伪YAML):
yaml hot:
format: parquet codec: snappy target_p95_ms: 1000 max_scan_mb: 2048 warm:
format: parquet codec: zstd:4 target_p95_ms: 2500 compaction: daily cold:
format: parquet codec: zstd:7 glacier: true retention: 365d

11)引擎实践(ClickHouse/Snowflake/BigQuery/Redshift/Presto)

ClickHouse:CODEC"和扬声器(LZ4/ZSTD/DoubleDelta),RLE/扫描的 ORDER BY,TTL/复合。
Snowflake/BigQuery:格式/群集自动化;帮助cluster by(日期,tenant,过滤器键)。
Redshift/Presto/Trino:带有ZSTD的Parquet/ORC,设置'hive。exec.compress.输出、统计数据和文件分离。


12) Piplines: 在哪里启用压缩

Ingest:在湖中录制时压缩蹦床(ZSTD/LZ4)。
Transform/DBT:使用所需的编解码器和排序创建柱状目标。
Serve/OLAP:具有适当编解码器的实例化视图;热达什板的预装料。
Export: для CSV/JSON — gzip/zstd;最好给派克。


13)测试和验证

AB分析:一组查询→比较p50/p95、bytes扫描、CPU时间、CR。
金色套件:重新编码/复合后验证正确性。
Regression perf tests:变换编解码器/层后,如果p95 ↑> X%的话。
DQ规则:类型/范围/NULL-rate不得在交叉时更改。


14)存储策略和TTL

Tiered: hot (7-14 dn.),warm(30-90 dn。),cold(≥180 dn。).

Downsampling:当"冷却"时,存储单元/草图而不是原始的。
Retention/Legal hold:不要消除与法规冲突;储存目录和版本。


15)反模式

"无处不在的Gzip level 9":昂贵的CPU,没有好处。
没有分类/聚类:坏的RLE/zone-maps →扫描昂贵。
JSON作为存储格式:方便,不利于分析。
文件太小:夸大元数据/seek;CR下降。
压缩前加密:几乎为零CR。
Lossy无标记:违反信任和报告。


16)实施路线图

1.发现:查询/数据配置文件,SLO和预算。
2.MVP:Parquet+ZSTD/Snappy,基本排序/聚类,复合。
3.调音:ZSTD级别,页面大小,cluster by,bloom/zone-maps。
4.Warm/Cold:分层存储,downsampling/草图,egress策略。
5.硬化:回归perf测试,DQ,runbooks重新编码。


17)发行前的支票清单

  • 格式:Parquet/ORC;包括统计/词典。
  • 通过过滤密钥进行聚类;按日期/特南特划分的政党。
  • 编解码器:hot=Snappy/LZ4,warm/cold=ZSTD(3-7);p95是正常的。
  • 合并设置;没有小文件;目标文件/页面大小。
  • DQ和黄金套件是绿色的;保留类型/范围。
  • 压缩后加密;PII被伪装;合格/法律保留。
  • 对Perf回归进行监测;p95/bytes scanned/CR上的差异。
  • 存储策略文档和重新编码说明已准备就绪。

18)迷你模板

DBT(带有ZSTD和群集的Parquet表):
sql create table if not exists analytics.sales_daily cluster by (event_date, tenant_id)
as select from {{ ref('sales_daily_view') }};
-- в конфиге модели: materialized=table, file_format=parquet, compression=zstd
复合政策(伪的):
yaml compaction:
target_file_mb: 256 small_file_threshold_mb: 32 schedule: "hourly"
Config downsampling(伪造):
yaml timeseries:
raw:  keep: 14d rollup_1m: keep: 90d rollup_1h: keep: 365d rollup_1d: keep: 1825d

底线:分析数据的压缩不仅是"包括编解码器",而且是一个整体策略:正确的格式,列的编解码,排序和分期,编译和存储级别,尊重加密和SLO。熟练的设计可以更快地进行扫描,低于计数和可预测的性能-在信任数据方面没有妥协。

Contact

联系我们

如需任何咨询或支持,请随时联系我们。我们随时准备提供帮助!

开始集成

Email — 必填。Telegram 或 WhatsApp — 可选

您的姓名 可选
Email 可选
主题 可选
消息内容 可选
Telegram 可选
@
如果填写 Telegram,我们也会在 Telegram 回复您。
WhatsApp 可选
格式:+国家代码 + 号码(例如:+86XXXXXXXXX)。

点击按钮即表示您同意数据处理。