增量编码 - Amazon Redshift
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

增量编码

对于 datetime 列,增量编码非常有用。

增量编码通过记录列中各个相邻值之间的差异来压缩数据。这种差异记录在磁盘上每个列值数据块的单独词典中。(一个 Amazon Redshift 磁盘数据块占用 1 MB 空间。) 例如,假设该列包含 1 到 10 个整数的顺序中的 10 个整数。第一个存储为 4 字节整数(加上 1 字节标记)。接下来 9 个警报分别存储为值为 1 的字节,指示它比上一个值大 1。

增量编码有两个版本:

  • DELTA 使用 1 字节的值(8 位整数)记录差值。

  • DELTA32K 使用 2 字节值(16 位整数)记录差值。

如果列中的大多数值都可使用单个字节压缩,则 1 字节变化非常有效。但是,如果增量较大,则在最糟糕的情况下,这种编码的效率会比存储未压缩的数据低。相似的逻辑也适用于 16 位版本。

如果两个值的差值超出 1 字节范围 (DELTA) 或 2 字节范围 (DELTA32K),则存储完整的原始值,并包含一个前置的 1 字节标志。1 字节的范围为 -127 到 127;2 字节的范围为 -32K 到 32K。

下表显示了增量编码如何用于数字列。

原始数据值 原始大小(字节) 差值(增量) 压缩值 压缩大小(字节)
1 4 1 1+4(标志 + 实际值)
5 4 4 4 1
50 4 45 45 1
200 4 150 150 1+4(标志 + 实际值)
185 4 -15 -15 1
220 4 35 35 1
221 4 1 1 1
总计 28 15