fastalp: 纯 Rust 打造的下一代 ALP 浮点无损压缩 — 25 GB/s 极速解码、压缩比提升 60%、压缩提速 2.6x

💡 原文中文,约2900字,阅读约需7分钟。
📝

内容提要

fastalp 是纯 Rust 实现的 ALP 浮点无损压缩算法,面向时序数据库与 IoT。相比 C++ 原版,端到端压缩提速 2.58 倍,解压达 25.3 GB/s,压缩比提升 60%,准常量数据可达 744 倍。核心优化包括三级剪枝、单遍寄存器解码、精确除法、自适应 Delta 及硬件舍入,支持零堆分配与 no_std。

🔎

延伸解读

性能优势的适用场景

fastalp 在时序数据库、IoT 遥测等场景中表现突出,其高吞吐和压缩比优势主要针对浮点数据。对于准常量数据,压缩比可达 744 倍,但实际效果取决于数据特征。若数据不规则或非十进制,压缩比可能下降。

与通用压缩算法的对比

相比 Zstd、LZ4 等通用算法,fastalp 在浮点数据上解压速度更快、压缩密度更高,但通用算法可能更适合混合类型数据。选择时需权衡数据特性和性能需求。

技术实现的关键改进

fastalp 通过三级剪枝、单遍寄存器解码、精确除法等优化,解决了原版 ALP 的采样开销大、异常字典膨胀等问题。这些改进提升了压缩速度和压缩比,同时支持零堆分配和 no_std,便于嵌入。

使用注意事项

fastalp 目前版本为 0.1,API 可能变化。它专为浮点数据设计,不适用于所有数据类型。在嵌入式环境中,需确认目标平台支持硬件舍入指令。

Q&A

fastalp 是什么?它主要用在哪些场景?

fastalp 是纯 Rust 实现的 ALP(自适应浮点无损压缩)算法,专为高吞吐时序数据库、IoT/遥测数据采集以及列式存储引擎打造。

fastalp 相比 C++ 原版 ALP 在性能上有哪些提升?

端到端压缩提速 2.58 倍(2.1 GB/s vs 0.8 GB/s),解压速度提升 1.31 倍(25.3 GB/s vs 19.3 GB/s),压缩比提升 60%(几何平均 9.50x vs 5.93x)。

fastalp 如何实现压缩比的大幅提升?

通过重构除法运算路径并采用差分增量(Delta)编码微小步进,收窄动态位宽,防止异常字典膨胀;同时离群点隔离机制将主体位流压缩至 0-bit,准常量数据可达 744 倍压缩。

fastalp 在解码速度上有什么优化?

采用融合单遍 AlpConsumer 寄存器解码流水线,位解包、前缀和累加、基准偏移计算和 IEEE 754 浮点数重构全部在 CPU 寄存器内单遍完成,消除 8KB 中间缓冲分配与重复读取,解压速度达 25.3 GB/s。

fastalp 支持哪些编程环境?是否支持 no_std?

完全零第三方依赖,通过 compress_into / decompress_into 实现运行期零堆内存分配,原生支持 no_std,可无缝嵌入嵌入式与内核环境,同时支持 f32 与 f64。

如何使用 fastalp 进行浮点数据压缩和解压?

在 Cargo.toml 添加 fastalp = "0.1",然后使用 compress 函数将浮点切片压缩为字节数组,使用 decompress 函数将字节数组无损还原为原始切片。

🏷️

标签

➡️

继续阅读