ALP:自适应无损浮点压缩算法
来源:github.com/cwida/ALP
📋 概述
ALP(Adaptive Lossless Floating-Point Compression)是一个专门针对双精度浮点数(float64) 的无损压缩算法,由 DuckDB 的核心团队(CWI Database Architectures 组)开发。与通用压缩算法(如 gzip、zstd)不同,ALP 利用浮点数的IEEE 754 二进制表示特性 进行编码优化:它分析数据块中浮点值的指数分布,自适应选择最优编码方案——对于指数分布集中的数据使用帧引用编码(FOR) 和前缀编码 ,对异常值则使用字典压缩回退。在浮点时间序列、科学计算数据和数据库列存储场景中,ALP 相比通用压缩器可实现2-5 倍更高的压缩比 同时保持极高的编解码速度。项目提供 C++ 实现和 Python 绑定,可无缝集成到数据管线中。
🔑 核心要点
专为 float64(双精度浮点) 设计,利用 IEEE 754 标准的位级结构(符号位、指数位、尾数位)而非通用字节模式进行压缩。
自适应编码 :算法先扫描数据块分析指数分布特征,然后自动在帧引用编码(FOR)、前缀编码和字典压缩之间切换,无需手动调参。
在浮点密集型场景中相比 gzip/zstd 可获得 2-5 倍压缩比提升 ,同时保持编解码速度在 GB/s 级别。
由 DuckDB 团队 开发,动机来源于列式数据库和分析引擎中对浮点数据的存储优化需求。
提供 C++ 库和 Python 绑定 ,API 简洁,可作为数据管线中的即插即用压缩层。
无损压缩意味着解压后 位精确(bit-exact) 恢复原始值,适用于科学计算和金融数据等不允许精度损失的场景。
💡 金句
Adaptive Lossless Floating-Point Compression — exploiting the structure of IEEE 754 doubles instead of treating them as opaque byte sequences. ——自适应无损浮点压缩——利用 IEEE 754 双精度数的结构,而非将其视为不透明字节序列。
👍 0 ❤️ 点赞 👎 0 沉底
← 返回 Lobsters 首页