暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Gorilla数据压缩(2)

原创 手机用户2895 2024-08-28
277

Timestamp压缩

gorilla的数据timestamp数据的特点是单调增加和近似的fixed interval,类似等差数列,因此使用delta of delta压缩。gorilla以固定时间窗口组织数据,称为span,span也称为block,在正常情况下,block大小相同(因为每个span产生的数据量相同)。压缩的基本单位为block,在block的头部,会存储一个基线timestamp,按2小时对齐(原因见压缩效果的figure 6),便于delta of delta计算。
具体细节如下:
image.png

image.png image.png
02:01:02与基线时间02:00:00的delta为62,02:02:02与02:01:02的delta为60,delta of deltas的结果为-2,因此符合情况©,使用2个bits ‘10’ flags和7个bits存储delta value -2。

其中2中的编码delta的方式为: 控制位 + Delta value, 控制位分别为’0’, ‘10’, ‘110’, ‘1110’, ‘1111’,是常见的一种无歧义的编码方式。另外Delta value的存储存在负数,除了示例中时间记录偏差外,另一种可能是数据存在缺失,例如每分钟产生一个监控数据,但在第4分钟因故障丢失了数据,delta可能是0, 60, (miss), 121, 59, 计算delta of delta为0, 61, -62,即出现较大的负数,范围在[-interval, 0)内,因此设计编码区间为对称区间。其实再抠一点,对于情况©可以表示的范围应该是**[-64, 0), (0, 64],因为0是不可能取到,否则的话即为情况(b),不能为情况©,其他同理。
gorilla根据业务数据delta of delta的分布确定了(b) ~ (f) 五种情况,如figure 3所示,96.39(1)表示96.39%的delta of delta结果为0, 符合情况(b)只需要1 bit表示,按比例可以计算出
平均使用1.40 bits**可存储一个timestamp,压缩比为45.71(= 64 / 1.40)。
image.png

Floating point value压缩

IEEE754规定了float在内存中的存储方法,以 num * 2^n 来描述(num为二进制的1.xxxxx )。
image.png
gorilla中,浮点数的压缩设计为编码存储delta value,delta使用按位XOR计算。floating point number的来源是监控数据,期望是大多数情况是较为稳定,因此XOR结果会有较多的0。具体编码算法的细节如下:
image.png
image.png

image.png image.png
该例子中XOR结果为0x0010000000000000其中leading zeros bits为11,有效位为1个bit 1, 符合情况3.(b),存储2bits 的control flags为’11’,使用5 bits表示leading zeros长度5, 6个bits表示有效位数为1,1个bit存储有效位1

figure 4的上表中可以看到对于整数数据,XOR的结果具有较多相同的leading zeros和trailing zeros,因此可以利用上一次XOR的结果,只存储有效的位数。
figure 4的下表可以发现对于有规律的数据(例子较为特殊是2进制可以无损表示的小数),XOR结果有效位较少,需要存储的有效位少,达到压缩的目的。
image.png
类似timestamp,gorilla根据实际业务数据统计了2和3(a), 3(b)三种情况的数据分布,可以算得平均需要13.12个bits存储一个floating point value, 因此压缩比为4.88
image.png

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论