ClickHouse性能调优——压缩和编码算法

随着数据库数据越来越多,给数据存储、网络访问造成成本和负担。压缩技术节约存储空间、加速网络访问的常用解决方案,本文主要介绍压缩算法和ClickHouse编码技术。

压缩类型

ClickHouse协议支持LZ4和ZSTD 压缩算法,两者都是基于字典使用校验和的压缩算法,LZ4较快、但压缩率比ZSTD较低。你可以选择合适算法,缺省为LZ4,当不确定选择哪种算法时建议使用LZ4。对于MergeTree引擎表,数据压缩设置可以在config.xml文件中设置:


<clickhouse>
  <compression incl="clickhouse_compression">
    <case>
      <min_part_size>104857600min_part_size>
      <min_part_size_ratio>0.01min_part_size_ratio>
      <method>zstdmethod>
      <level>3level>
    case>
  compression>
clickhouse>

我们可以查看表的压缩率,对比压缩效果:这里使用Cell Towers数据集,包括43百万数据。相同数据使用不同压缩算法,对比结果如下:

Table Name Compressed Table Size(GB) Uncompressed Table Size(GB) Compression Ratio
cell_towers_LZ4 1,07 2,06 1,92
cell_towers_zstd 0,84 2,06 2,45

现在让我们看下每列压缩率,下表使用LZ4压缩算法,基数和数据类型是影响压缩比的主要因素。

┌─Column Name───┬─Column Type─┬─compressed─┬─uncompressed─┬─Compression Ratio─┬─compression_codec─┐
│ changeable    │ UInt8       │ 188.32 KiB │ 41.27 MiB    │            224.41 │                   │
│ averageSignal │ UInt8       │ 188.32 KiB │ 41.27 MiB    │            224.41 │                   │
│ radio         │ Enum8(''    │ 188.38 KiB │ 41.27 MiB    │            224.35 │                   │
│ mcc           │ UInt16      │ 384.88 KiB │ 82.54 MiB    │            219.61 │                   │
│ net           │ UInt16      │ 410.99 KiB │ 82.54 MiB    │            205.66 │                   │
│ unit          │ Int16       │ 2.12 MiB   │ 82.54 MiB    │             38.86 │                   │
│ range         │ UInt32      │ 48.27 MiB  │ 165.09 MiB   │              3.42 │                   │
│ samples       │ UInt32      │ 77.14 MiB  │ 165.09 MiB   │              2.14 │                   │
│ created       │ DateTime    │ 87.37 MiB  │ 165.09 MiB   │              1.89 │                   │
│ cell          │ UInt64      │ 178.76 MiB │ 330.17 MiB   │              1.85 │                   │
│ area          │ UInt16      │ 48.29 MiB  │ 82.54 MiB    │              1.71 │                   │
│ lat           │ Float64     │ 259.85 MiB │ 330.17 MiB   │              1.27 │                   │
│ lon           │ Float64     │ 261.98 MiB │ 330.17 MiB   │              1.26 │                   │
│ updated       │ DateTime    │ 130.71 MiB │ 165.09 MiB   │              1.26 │                   │
└───────────────┴─────────────┴────────────┴──────────────┴───────────────────┴───────────────────┘

使用ZSTD压缩压缩率如下表,压缩效果明显优于LZ4:

┌─Column Name───┬─Column Type─┬─compressed─┬─uncompressed─┬─Compression Ratio─┬─compression_codec─┐
│ changeable    │ UInt8       │ 29.05 KiB  │ 41.27 MiB    │           1454.95 │                   │
│ averageSignal │ UInt8       │ 29.05 KiB  │ 41.27 MiB    │           1454.95 │                   │
│ radio         │ Enum8(''    │ 29.08 KiB  │ 41.27 MiB    │           1453.44 │                   │
│ mcc           │ UInt16      │ 62.84 KiB  │ 82.54 MiB    │           1344.98 │                   │
│ net           │ UInt16      │ 80.79 KiB  │ 82.54 MiB    │           1046.21 │                   │
│ unit          │ Int16       │ 1.19 MiB   │ 82.54 MiB    │             69.18 │                   │
│ samples       │ UInt32      │ 31.46 MiB  │ 165.09 MiB   │              5.25 │                   │
│ range         │ UInt32      │ 31.51 MiB  │ 165.09 MiB   │              5.24 │                   │
│ cell          │ UInt64      │ 113.25 MiB │ 330.17 MiB   │              2.92 │                   │
│ created       │ DateTime    │ 70.06 MiB  │ 165.09 MiB   │              2.36 │                   │
│ area          │ UInt16      │ 38.65 MiB  │ 82.54 MiB    │              2.14 │                   │
│ lat           │ Float64     │ 225.17 MiB │ 330.17 MiB   │              1.47 │                   │
│ lon           │ Float64     │ 229.93 MiB │ 330.17 MiB   │              1.44 │                   │
│ updated       │ DateTime    │ 119.08 MiB │ 165.09 MiB   │              1.39 │                   │
└───────────────┴─────────────┴────────────┴──────────────┴───────────────────┴───────────────────┘

列压缩编码

在ClickHouse中,还可以在支持的表引擎中压缩单个列。支持压缩的表引擎如下表所示:

Table Engine Column Compression Default Compression
Merge Tree Family Yes Yes, Change with “compression” settings
Log Family Yes Yes, only LZ4 by default
Set No Yes, only default compression
Join No Yes, only default compression

可以在创建表语句或修改列中使用CODEC关键字定义列的压缩方法。

CREATE TABLE <database>.<table>
(
    column1 DateTime CODEC(<Codec>),
    .
    .
    .
)
ENGINE = <EngineType>
. . .


--------------------------------

ALTER TABLE <database>.<table> MODIFY COLUMN column1 CODEC(<Codec>);

ClickHouse支持通用目的编码和特定编码,通用编解码器更像默认编解码器(LZ4, ZTSD)及其修改版本。特定编解码器是为了利用数据的特定特征使压缩更有效而设计的。

通用编码

  • NONE : No Compression.
  • LZ4 : Applies LZ4 fast compression.
  • LZ4HC[(level)] : LZ4 HC (high compression) algorithm with configurable level.
  • ZSTD[(level)] : ZSTD compression algorithm with configurable level.

特定编码算法

​ 这些编解码器旨在通过使用数据的特定特征使压缩更有效。有些编解码器本身不压缩数据。相反,它们为通用的编解码器准备数据,编解码器比不准备编解码器更好地压缩数据。

  • Delta : This approach stores the difference between 2 neighbor values. It can be combined with LZ4 and ZSTD.
  • DoubleDelta : This approach stores the difference between 2 neighbor delta values (delta of deltas). Suitable for time series data.
  • Gorilla : Calculates XOR between current and previous value. Suitable for slowly changing floating numbers.
  • T64 : It crops unused high bits of values in integer data types(include Enum, Date, DateTime) and puts them into a 64×64 bit matrix.
  • FPC : Used in floating point values. XOR between the actual value and the predicted value.

我选择不同类型列,对比不同编码的压缩率。首先时ENUM8(radio列的数据类型),共有五个值,统计如下:

┌──count()─┬─radio─┐
│      867 │ NR    │
│   556344 │ CDMA  │
│  9931312 │ GSM   │
│ 12101148 │ LTE   │
│ 20686487 │ UMTS  │
└──────────┴───────┘

不同压缩率对比图如下。显然ZSTD性能好于其他。

ClickHouse性能调优——压缩和编码算法_第1张图片

再看看Uint16(area字段类型),该字段基数为57512,压缩率对比图如下:

ClickHouse性能调优——压缩和编码算法_第2张图片

最后是Datetime(updated字段类型),该列有1千7百万缓慢变化时间序列数据。使用DoubleDelta和zstd组合性能最好。
ClickHouse性能调优——压缩和编码算法_第3张图片

总结

本文主要介绍了ClickHouse的压缩类型及编码方法,并测试数据进行压缩率对比分析。根据分析结果,压缩率不仅和压缩算法和编码相关,也和数据类型,基数,数据特征有关。简单总结如下:

ClickHouse性能调优——压缩和编码算法_第4张图片

参考资料:

ClickHouse Compression Algorithms - ClickHouse Performance (chistadata.com)

你可能感兴趣的:(ClickHouse,clickhouse,数学建模,压缩与编码)