1 个不稳定版本
0.1.0 | 2021 年 11 月 12 日 |
---|
在 科学 类别中排名 #562
9KB
182 行
floatpack
基于 SIMD 的 Decimal
的位打包,来自 rust_decimal
包。
简而言之
算法
- 每个
Decimal
值都被序列化为它的组件(= 4 xu32
) - 然后通过存储它们的累积差(XOR)对结果 4 个组件流进行单独压缩
- 然后对 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