Elasticsearch和Clickhouse的压缩配置

一、背景
Elasticsearch和Clickhouse都支持数据压缩,使用压缩可以有效减少数据存储的大小和节约带宽,但是会牺牲一些查询速度和增加一定CPU消耗,是一种时间换空间的做法。

二、Elasticsearch的压缩算法配置
通过index.codec配置压缩算法,可选配置有:default、best_compression、none

  • default:默认选项,使用LZ4压缩算法,特点是压缩/解压速度快,但压缩率一般。
  • best_compression:使用DEFLATE压缩算法,特点是压缩率高,但压缩/解压速度慢,CPU消耗大。
  • none:不使用压缩算法。

三、Clickhouse的压缩算法配置
通过config.xml中compression配置压缩算法,可选配置:LZ4、ZSTD、Delta、DoubleDelta、Gorilla、T64

  • LZ4:默认选项,特点是压缩/解压速度快,但压缩率一般。

  • ZSTD:压缩率跟LZ4相当,但解压速度更快且CPU占用更少。

  • Delta:特点是压缩率高,但压缩/解压速度慢,CPU消耗大。

  • DoubleDelta:算法特点是存储两个相邻 delta 值之间的差值。适用于时间序列数据。

  • Gorilla:算法特点是计算当前值与前一个值的异或。适用于缓慢变化的浮点数。

  • T64:算法特点是将整数数据类型(包括 Enum、Date、DateTime)中未使用的高位值裁剪出来,并放入一个 64×64 位矩阵中。
    四、总结
    Elasticsearch和Clickhouse都将LZ4作为默认压缩算法,是因为使用这个算法查询速度会更快,如果实际使用时,需要降低使用存储空间,而能容忍一定的性能损耗,可以选择其他压缩率更高的算法。
    五、常见算法压缩率及压缩/解压速度
    在配备 Core i7-9700K CPU @ 4.9GHz 并运行 Ubuntu 24.04上进行测试。(https://facebook.github.io/zstd/#benchmarks)

    Compressor name Ratio Compression Decompress.
    zstd 1.5.7 -1 2.896 510 MB/s 1550 MB/s
    zlib 1.3.1 -1 2.743 105 MB/s 390 MB/s
    brotli 1.1.0 -0 2.702 400 MB/s 425 MB/s
    zstd 1.5.7 --fast=1 2.439 545 MB/s 1850 MB/s
    zstd 1.5.7 --fast=3 2.241 635 MB/s 1980 MB/s
    quicklz 1.5.0 -1 2.238 520 MB/s 750 MB/s
    lzo1x 2.10 -1 2.106 650 MB/s 780 MB/s
    lz4 1.10.0 2.101 675 MB/s 3850 MB/s
    snappy 1.2.1 2.089 520 MB/s 1500 MB/s
    lzf 3.6 -1 2.077 410 MB/s 820 MB/s
posted @ 2025-08-08 11:27  星辰下的键盘  阅读(69)  评论(0)    收藏  举报