列设计:
Kudu表由一个或多个列组成,每个列都具有定义的类型。不属于主键的列可能为空。支持的列类型包括:
boolean
8-bit signed integer
16-bit signed integer
32-bit signed integer
64-bit signed integer
unixtime_micros (64-bit microseconds since the Unix epoch)
single-precision (32-bit) IEEE-754 floating-point number
double-precision (64-bit) IEEE-754 floating-point number
UTF-8 encoded string (up to 64KB uncompressed)
binary (up to 64KB uncompressed)
注意:
不支持date、timestamp类型,实际生产环境中可将日期转化为时间戳
列编码:
plain Encoding ( 普通编码 )
- 数据以其自然格式存储。例如,int32 values作为固定大小的 32 位存储。
Bitshuffle Encoding
- 重新排列一组值以存储每个值的最高有效位,其次是每个值的第二个最高有效位,依此类推。最后,结果是LZ4压缩。Bitshuffle编码对于具有许多重复值的列或按主键排序时少量更改的列是不错的选择。 bithuffle项目对性能和用例有很好的概述。
Run Length Encoding ( 运行长度编码 )
- 通过仅存储值和计数,在列中压缩运行(连续重复值)。当按主键排序时,运行长度编码对于具有许多连续重复值的列是有效的。
Dictionary Encoding ( 字典编码 )
- 构建了唯一值的字典,并且每个列值都被编码为字典中的相应索引。字典编码对于基数较低的列是有效的。如果给定行集的列值由于唯一值的数量太高而无法压缩,则Kudu 将透明地回退到该行集的纯编码。这在flush过程中进行评估。
Prefix Encoding ( 前缀编码 )
- 公共前缀在连续列值中进行压缩。前缀编码对于共享公共前缀的值或主键的第一列可能有效,因为行按tablet内的主键排序。
列压缩:
- Kudu 允许使用LZ4、Snappy或zlib压缩编解码器进行每列压缩。默认情况下,列未压缩存储。如果减少存储空间比原始扫描性能更重要,使用压缩