Sharing benchmark observations on decimal floating-point compression: comparing integer mapping with Gorilla/Chimp on time-series datasets #24935
Replies: 1 comment
|
Performance update: fastalp v0.1.37 release I have updated the benchmark observations with the latest fastalp v0.1.37 release (published on crates.io with source code at fastalp). Key improvements and updated metrics:
|
Uh oh!
There was an error while loading. Please reload this page.
Hello DataFusion community,
Apache DataFusion is widely used across modern analytical and time-series query engines. Since floating-point columns represent a major workload in columnar analytics, I wanted to share benchmark observations and implementation findings on lossless floating-point compression from fastalp (available on crates.io), an implementation of the Adaptive Lossless Floating-Point Compression (ALP) algorithm.
Benchmark results on real-world time-series datasets
I evaluated fastalp against classic floating-point codecs (Gorilla, Chimp, Chimp128, Patas) on public time-series datasets including city_temperature.csv, Stocks-Germany-sample.txt, and SSD_HDD_benchmarks.csv. Running 25 iterations per dataset on Apple Silicon (M2 Max) produced the following unified averages:
Overall throughput across standard IEEE 754 float benchmarks:
Implementation observations for columnar analytics
Decimal integer mapping: In real-world telemetry and business metrics, floating-point numbers often have a fixed or small number of decimal places (e.g. 19.99, 0.05). Mapping values to integers via adaptive decimal scaling (10^e) shifts the data domain to Frame-of-Reference (FOR) integer packing, enabling SIMD-accelerated execution rather than serial bitwise XOR streams.
Exact decimal division: Precomputed floating-point multiplication (value * 10^e) occasionally introduces 1-ULP precision noise due to IEEE 754 rounding (for example, 0.35 * 100.0 evaluates to 34.99999999999999, casting to 34 instead of 35). Adding an exact division path during sampling and reconstruction eliminates these pseudo-exceptions and preserves bit-packing efficiency.
First-order difference (Delta-ALP): For monotonic timestamps, cumulative metrics, and smooth waveforms, cascading first-order delta encoding onto the scaled integers significantly narrows residual values, improving compression ratios while preserving O(1) random block access.
Pure register SIMD decoding: Vectorized integer unpacking achieves 0.423 µs per 1000 values (~2.36 billion values/sec), reaching 55 to 77 GB/s linear memory bandwidth on modern CPUs.
Zero-heap streaming API: The compress_into and decompress_into interfaces allow encoding and decoding directly into caller-provided buffers, eliminating allocation overhead during query scans.
I hope these benchmark results and implementation findings provide useful reference points for columnar storage and query execution discussions.
All reactions