You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

存储层存储字符串/二进制批数据为何采用长度而非偏移量编码?

变长数据存储:长度比偏移量压缩率高的原因

本质逻辑:数据特性决定压缩效率

采用长度存储而非偏移量,压缩率更高的核心是长度值的数据分布更适合压缩算法发挥作用,不是只有特定算法才有效,但不同算法的收益差别不小:

  • 冗余度差异:偏移量是累加生成的,比如第一个数据偏移0,第二个是第一个的长度,第三个是前两个长度之和,数值持续递增,相邻值的差值才是当前字段长度,但偏移量本身几乎无重复规律;而长度值是每个字段的独立长度,OLAP场景里同列数据的长度往往高度相似(比如存储商品标题,大多集中在10-20字),重复或接近的数值更多,压缩算法能轻松识别冗余进行压缩。

  • 不同压缩算法的表现:

    • 像LZ4、zstd这类依赖字典和重复序列的算法,长度值的重复模式极易被捕捉,能生成更短的字典映射;偏移量的递增特性导致几乎无重复序列,压缩效率极低。
    • Snappy、LZO这类统计型压缩算法,长度值集中在特定区间,高频数值能用更少的比特位存储;偏移量分布过于发散,统计压缩的收益基本可以忽略。
    • 几乎所有通用压缩算法都能从长度存储中获益,只是收益程度不同——越依赖重复模式或统计分布的算法,两者的压缩率差异越明显。

OLAP列存的放大效果

OLAP数据库(如ClickHouse)和Parquet这类列存格式,本身按列聚合数据,同列的长度值天然聚集在一起,进一步放大了长度值的分布相似性,让压缩算法的优化效果更显著;而如果存储偏移量,整列数值持续递增,熵值极高,压缩难度极大。

Parquet格式长度存储示例

内容的提问来源于stack exchange,提问作者Hsu Jason

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 04:30:02