floatpack

Crates.iofloatpack
lib.rsfloatpack
version0.1.0
sourcesrc
created_at2021-11-12 16:15:18.615595
updated_at2021-11-12 16:15:18.615595
descriptionBitpacking with SIMD for `Decimal` from the `rust_decimal` crate
homepage
repository
max_upload_size
id480980
size8,893
Cyrill Leutwiler (xermicus)

documentation

https://docs.rs/floatpack

README

floatpack

Bitpacking with SIMD for Decimal from the rust_decimal crate.

In a nutshell

The algorithm:

  1. Each Decimal value is serialized into its components (= 4 x u32)
  2. The resulting 4 component streams are individually compressed by storing their cumulative difference (XOR)
  3. The 4 compressed component streams are then bit-packed

The idea is that this should get good compression rates with little computational complexity, especially for contiguous data. In timeseries data, usually:

  • one datapoint only differs slightly from the next one in the series and
  • you have a lot of datapoints

This represents a highly specific use-case. If you are not dealing with timeseries data other compression algorithms are probably more suitable.

Usage example

use floatpack::{pack, unpack};
use rust_decimal_macros::*;

let values = vec![dec!(1.0), dec!(2.0), dec!(3.0)];
assert_eq!(values, unpack(&pack(&values[..])));
Commit count: 0

cargo fmt