美文网首页
clickhouse数据压缩对比

clickhouse数据压缩对比

作者: 越狱的灵感 | 来源:发表于2022-06-02 14:36 被阅读0次

    简介

    Clickhouse 数据压缩主要使用两个方案LZ4和ZSTD
    LZ4解压缩速度上会更快,但压缩率较低,
    ZSTD解压缩较慢。但是压缩比例较高。
    clickhouse不同压缩算法测试对比,LZ4最优。
    https://www.percona.com/blog/2016/04/13/evaluating-database-compression-methods-update
    以下测试主要验证业内测试的结论,测试的zstd数据会多一点,测试不是十分严谨,仅供参考。

    压测环境

    开发(dev) 机器数量:3 cpu:40core 内存:256G disk:2.0T*10

    测试数据

    kafka TOPIC: cdn-log-analysis-realtime。可消费数据总量363255827。数据消费4次到ck。

    Clickhouse表

    cdn_log_analysis_realtime lz4压缩
    cdn_log_realtime zstd压缩

    压缩配置

    在/etc/metrika.xml
    <compression incl="clickhouse_compression"> --指定incl
    <case>
    <min_part_size>10000000000</min_part_size> --数据部分的最小大小
    <min_part_size_ratio>0.01</min_part_size_ratio> --数据部分大小与表大小的比率
    <method>zstd</method> --压缩算法,zstd和lz4
    </case>
    </compression>

    LZ4

    压缩率

    执行sql :SELECT table AS 表名, sum(rows) AS 总行数, formatReadableSize(sum(data_uncompressed_bytes)) AS 原始大小, formatReadableSize(sum(data_compressed_bytes)) AS 压缩大小, round((sum(data_compressed_bytes)/sum(data_uncompressed_bytes))*100, 0) AS 压缩率 FROM system.parts WHERE (database IN ('default') AND (table = 'cdn_log_analysis_realtime') ) GROUP BY table

    分别查看不同机器的压缩比例


    1.png 2.png 3.png

    平均4.85亿数据,原始数据105G压缩后数据27G,平均压缩率27%

    查询能力

    执行sql : select toDateTime(intDiv(toUInt32(its),60)*60) as t, count() as t_c, avg(speed) as t_v, quantile(0.99)(speed) as t_99, quantile(0.90)(speed) as t_90 , quantile(0.75)(speed) as t_75 , quantile(0.50)(speed) as t_50 , quantile(0.25)(speed) as t_25 from default.cdn_log_analysis_realtime_all where day='2020-12-17' group by t order by t_v desc

    冷数据(第一次查询)

    1.png
    查询 1.45 billion 行 共花费7.446 sec

    热数据(第二次查询)

    2.png
    查询 1.45 billion 行 共花费1.150 sec

    ZSTD

    压缩率

    执行sql :
    SELECT table AS 表名, sum(rows) AS 总行数, formatReadableSize(sum(data_uncompressed_bytes)) AS 原始大小, formatReadableSize(sum(data_compressed_bytes)) AS 压缩大小, round((sum(data_compressed_bytes)/sum(data_uncompressed_bytes))*100, 0) AS 压缩率 FROM system.parts WHERE (database IN ('default') AND (table = 'cdn_log_realtime') ) GROUP BY table

    分别查看不同机器的压缩比例


    1.png 2.png 3.png
    平均 4.85亿数据 原始数据 105G压缩后数据24G,平均压缩率22%

    查询能力

    执行sql :select toDateTime(intDiv(toUInt32(its),60)*60) as t, count() as t_c, avg(speed) as t_v, quantile(0.99)(speed) as t_99, quantile(0.90)(speed) as t_90 , quantile(0.75)(speed) as t_75 , quantile(0.50)(speed) as t_50 , quantile(0.25)(speed) as t_25 from default.cdn_log_realtime where day='2020-12-25' group by t order by t_v desc

    冷数据(第一次查询)

    1.png
    查询 1.45 billion 行 共花费7.162 sec

    热数据(第二次查询)

    2.png
    查询 1.45 billion 行 共花费3.884 sec

    ZSTD和LZ4压缩集群整体对比

    执行sql:SELECT 'ZSTD' as 压缩方式 , table AS 表名, sum(rows) AS 总行数, formatReadableSize(sum(data_uncompressed_bytes)) AS 原始大小, formatReadableSize(sum(data_compressed_bytes)) AS 压缩大小, round((sum(data_compressed_bytes)/sum(data_uncompressed_bytes))100, 0) AS 压缩率 FROM cluster(ctyun31, system, parts) WHERE (database IN ('default') AND (table = 'cdn_log_realtime') ) GROUP BY table union all SELECT 'LZ4' as 压缩方式 , table AS 表名, sum(rows) AS 总行数, formatReadableSize(sum(data_uncompressed_bytes)) AS 原始大小, formatReadableSize(sum(data_compressed_bytes)) AS 压缩大小, round((sum(data_compressed_bytes)/sum(data_uncompressed_bytes))100, 0) AS 压缩率 FROM cluster(ctyun31, system, parts) WHERE (database IN ('default') AND (table = 'cdn_log_analysis_realtime') ) GROUP BY table

    3.png

    总结

    测试不是十分严谨,ZSTD的ck表的数据多一点,但是不影响测试结果,仅做参考。
    压缩能力上,ZSTD的压缩比例为22%,LZ4的压缩比例为27%,ZSTD的压缩性能更好。但是效果不是很明显。
    查询能力上,冷数据查询,两者相差不大。热数据方面,ZSTD为3.884s,而LZ4为1.150s。ZSTD查询时间在3.37倍以上,LZ4的查询能力更强。
    综上所述,建议使用LZ4。

    集群数据量后期预估,按当前使用lz4压缩方案,3分片1副本,计算35.510*0.8(按磁盘最多使用80%算) 的硬盘能存储大概多少数据。

    一天数据100亿
    一天磁盘消耗 (10000000000/1453023308.084.98)/1024.0=0.57TB
    能存储天数 3
    5.5100.8/0.57=231.57 day。

    一天数据1000亿
    231.57/10=23.1day。

    相关文章

      网友评论

          本文标题:clickhouse数据压缩对比

          本文链接:https://www.haomeiwen.com/subject/edvxmrtx.html