编码 | 解码 | 压缩

> delta | diff | compress <

// Delta 编码——存储差值而不是绝对数值

[SEQUENTIAL]

序列数据

针对相邻数值差异较小的序列数据进行了优化。

[VARIANTS]

多种变体

支持 Simple、XOR、ZigZag 等多种 Delta 编码方式。

[EFFICIENT]

空间高效

降低存储序列数据所需的比特宽度。

>> 技术说明

Delta 编码的工作原理:

Delta 编码会先存储第一个数值,然后存储相邻数值之间的差值。这样可以把缓慢变化的数据转换成更小的整数序列,从而更容易压缩。XOR Delta 使用按位 XOR 代替减法。ZigZag 编码则把有符号整数映射为无符号整数,以获得更好的压缩率。

Delta 示例:

简单 Delta: [100, 102, 107, 110, 108] → [100, 2, 5, 3, -2] XOR Delta: [15, 14, 12, 8, 0] → [15, 1, 2, 4, 8] ZigZag Delta: [10, 8, 12, 9] → [10, -2, 4, -3] → [10, 3, 8, 5](编码后)

为什么使用 Delta 编码:

  • >时间序列压缩
  • >传感器数据存储
  • >音视频编码
  • >数据库压缩
  • >网络协议

>> 常见问题

什么是 Delta 编码?

Delta 编码是一种数据压缩技术,不直接存储每个数值,而是存储相邻数值之间的差值。当相邻数据彼此接近时,差值会更小,因此可用更少的比特来表示。

Simple Delta 和 XOR Delta 有什么区别?

Simple Delta 使用减法(当前值 − 前一个值),而 XOR Delta 使用按位 XOR 运算。XOR Delta 可以在不担心溢出的情况下还原原始数据,并且适合位模式相似的数据。Simple Delta 对于数字序列更直观。

什么是 ZigZag 编码?

ZigZag 编码会把有符号整数映射为无符号整数,并保留较小的绝对值。例如:-1 编码为 1、1 编码为 2、-2 编码为 3 等。这样,小的负数可以像小的正数一样被高效压缩。

在什么场景下 Delta 编码最有效?

Delta 编码非常适合用于排序列表、时间序列数据、连续 ID、逐渐变化的传感器读数、音频采样,以及任意相邻值高度相关的数据。

其他语言