Repository navigation
Sharing benchmark observations on decimal floating-point compression: comparing integer mapping with Gorilla/Chimp on time-series datasets #27615
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.
Uh oh!
There was an error while loading. Please reload this page.
Hello InfluxDB community,
InfluxDB is the benchmark in time-series data storage, where floating-point metrics (sensor measurements, system telemetry, IoT events) account for substantial disk and memory volume.
I wanted to share some recent 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 time-series floating-point compression algorithms (Gorilla, Chimp, Chimp128, Patas) on public 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 time-series columnar metrics
Decimal integer mapping: In real-world telemetry, floating-point numbers often represent physical measurements with decimal precision (e.g. 23.6, 0.012). Mapping values to integers via adaptive decimal scaling (10^e) shifts the data domain to integers, enabling SIMD-accelerated Frame-of-Reference (FOR) bitpacking rather than serial bitwise XORing.
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.
I hope these benchmark results and implementation findings offer useful data points for the InfluxDB community and time-series developers.
All reactions