ALP使用自适应编码,加强版的伪小数去编码双进度小数作为整数,如果它们产生于小数,否则就用矢量化压缩小数的前位。它的高速来源于在标量编码的实现,自动矢量化,使用他们FastLanes的库,一个高效的二阶段压缩算法,第一次采样的行组并且矢量化
关键词
无损压缩,浮点压缩,矢量化执行,柱式存储,大数据格式
introduction
数据分析管道比经典的企业数据库操作浮点数更加频繁,经典数据库通常依赖于定点小数(系统通常存储为64位小数)浮点数据也是天然适合与科学和传感器数据,可以有时间分量,产生时间序列。
分析数据系统与大数据格式采用柱状压缩存储,通过通用或轻量级压缩方式构造
轻量级方式,也叫做编码,使用列的类型与领域,比如FOR,Delta,Dictionary,RLE,
前两个用于高基序列,把值编码为一些整数的增量,FOR为相较固定基数的增量,DELTA是之前数值的增量。还只编码小整数到必要的位
然而对于IEEE754的双精度,增量会引入舍入误差,使Delta和FOR不能对原始浮点数据进行压缩
在大数据格式里通用的方法是gzip,Zstd,Snappy,LZ4
LZ4和snappy用更多的压缩率来交换速度,gzip相反,Zstd在中间
通用压缩方式的缺点是他们比轻量级编码在解码上更慢。而且对任何形式都是以块压缩的方式解压
最近,一系列新的浮点压缩方式被提出:Gorilla [38], Chimp and Chimp128 [29], PseudoDecimals (PDE) [31], Patas [24] and Elf [28].
通用的想法是使用异或,不断操作数据流的前一个值,进行异或
如在位的级别上,使用异或多少和加的功能有些类似,但没有舍入的误差
Chimp对数据流中的紧前的一个数进行异或,Chimp128对更早的数进行,只不过代价是额外用7位来产生
异或完后,大多数位为0,Chimp只存储那些不是0的位序列,Pata存储非0字节序列而不是位序列
用压缩率来换更快的解压时间,ELF用数学方法把更多异或位变为0,来提高压缩率,代价是比较低的压缩,解压缩时间
PDE不一样,因为它不依赖异或,它观察到大量值在存储时起先是十进制数,所以它努力去找到原始的十进制数并压缩那个