温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Column列数据压缩技术有哪些

发布时间:2026-01-06 21:03:41 来源:亿速云 阅读:91 作者:小樊 栏目:数据库

列式数据压缩技术全景

列式数据压缩通常围绕通用无损压缩编码压缩工程化策略三层展开,既追求更高的压缩比,也兼顾解压速度扫描性能,在OLAP场景尤为有效。

一 通用无损压缩算法

  • LZ4 / LZ4HC:以极快的解压速度著称,适合高吞吐扫描;LZ4HC在压缩率上略优,常用于对解压时延敏感的分析查询。
  • ZSTD:在压缩率与速度间取得良好平衡,支持多级压缩级别,适合作为通用默认算法。
  • ZLIB(Deflate):兼容性与稳定性好,压缩率中等,常见于传统数据库与通用存储。
  • Brotli / LZMA:压缩率更高,但解压更慢,多用于归档或近线存储,对在线分析不太友好。
    这些算法在列式引擎中常以“压缩函数接口”形式与数据类型解耦,便于按列、按块选择最优算法。

二 编码压缩与列式特化

  • 字典编码(Dictionary Encoding):将重复值映射为短码,适合低基数列(如性别、状态码),常作为列式压缩的第一层。
  • Delta / Delta-of-Delta 编码:对有序/近似有序数列(时间戳、自增ID)存储相邻差值,显著减少熵。
  • RLE(Run-Length Encoding):对长重复值序列高效,常与前述编码组合使用。
  • 位打包(Bit-Packing):对定长小值域整数(枚举、标志位)按最小位宽存储。
  • 旋转门压缩(SDT, Swinging Door Trending):面向实时/时间序列的线性/分段拟合压缩,用函数覆盖区间内数据,适合趋势性强的数据。
    这些编码与列式布局天然契合:同列数据相似度高、类型一致,便于获得更高压缩比与更快扫描。

三 工程化与存储层策略

  • 块/段级压缩与多级管线:按列段(Column Segment)或块为单位独立压缩,结合扫描解压路径优化,减少不必要的解压与I/O。
  • 压缩单元与混合压缩:如 Oracle HCCCU(压缩单元)概念,在块之上组织列压缩,兼顾高压缩比与可更新性;分析型格式(如 Parquet/ORC)亦采用行组/列块的多算法组合。
  • 文件系统透明压缩与打孔(Punch Hole):利用 sparse file / hole punching 减少落盘占用,代码路径轻量,但可能带来碎片缓冲池占用差异。
  • 列级压缩属性:例如 MySQL/AliSQL/Percona/TXSQL 支持将 BLOB/TEXT/VARCHAR/VARBINARY/JSON 等列标记为 COMPRESSED,可指定 ZLIB/LZ4/ZSTD 等算法;通常不支持在压缩列上创建二级索引,且改变压缩属性可能需要重建表
  • 阈值与级别控制:如设置列压缩阈值(仅对超过阈值的列实际压缩)与压缩级别(速度/压缩率权衡),以适配不同负载与SLA。

四 选型与落地建议

  • 按数据类型分层组合
    • 低基数字符串/枚举 → 字典编码LZ4/ZSTD
    • 有序数值/时间戳 → Delta/Delta-of-DeltaZSTD
    • 长重复序列 → RLELZ4
    • 文本/日志 → 通用压缩(ZSTD 优先)
  • 按访问模式选择算法:高并发扫描优先 LZ4/LZ4HC;离线批处理或存储成本敏感优先 ZSTD;近线归档可考虑 Brotli/LZMA
  • 结合存储格式与引擎能力:利用列式的向量化执行按列解压,在查询只触及少数列时显著降低 I/O;必要时采用混合压缩(如 HCC/Parquet/ORC)平衡压缩比与更新代价。
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI