#decimal #bitpacking #compression #pack-unpack

floatpack

基于 SIMD 的 Decimal 的位打包,来自 rust_decimal

1 个不稳定版本

0.1.0 2021 年 11 月 12 日

科学 类别中排名 #562

MIT 许可证

9KB
182

floatpack

基于 SIMD 的 Decimal 的位打包,来自 rust_decimal 包。

简而言之

算法

  1. 每个 Decimal 值都被序列化为它的组件(= 4 x u32
  2. 然后通过存储它们的累积差(XOR)对结果 4 个组件流进行单独压缩
  3. 然后对 4 个压缩组件流进行位打包

这种想法是,这应该会获得良好的压缩率,同时计算复杂度较低,尤其是在连续数据的情况下。在时间序列数据中,通常

  • 一个数据点只比序列中的下一个数据点略有不同,并且
  • 你有大量的数据点

这代表了一个非常特定的用例。如果你不处理时间序列数据,其他压缩算法可能更适合。

使用示例

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[..])));

依赖项

~1.1–1.8MB
~39K SLoC