clickhouse数据压缩对比
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了clickhouse数据压缩对比相关的知识,希望对你有一定的参考价值。
参考技术A 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。
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>
执行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
分别查看不同机器的压缩比例
平均 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
冷数据(第一次查询)
热数据(第二次查询)
执行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
分别查看不同机器的压缩比例
执行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
冷数据(第一次查询)
热数据(第二次查询)
执行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
测试不是十分严谨,ZSTD的ck表的数据多一点,但是不影响测试结果,仅做参考。
压缩能力上,ZSTD的压缩比例为 22% ,LZ4的压缩比例为 27% ,ZSTD的压缩性能更好。但是效果不是很明显。
查询能力上,冷数据查询,两者相差不大。热数据方面,ZSTD为 3.884s ,而LZ4为 1.150s 。ZSTD查询时间在 3.37倍 以上,LZ4的查询能力更强。
综上所述,建议使用LZ4。
集群数据量后期预估,按当前使用lz4压缩方案,3分片1副本,计算3 5.5 10*0.8(按磁盘最多使用80%算) 的硬盘能存储大概多少数据。
一天数据100亿
一天磁盘消耗 (10000000000/1453023308.0 84.98)/1024.0=0.57TB
能存储天数 3 5.5 10 0.8/0.57=231.57 day。
一天数据1000亿
231.57/10=23.1day。
以上是关于clickhouse数据压缩对比的主要内容,如果未能解决你的问题,请参考以下文章
ClickHouse 内核原理图文详解关于分区索引标记和压缩数据的协同工作...
关于压缩后字符串写入clickhouse再读取后无法反解压的问题
关于压缩后字符串写入clickhouse再读取后无法反解压的问题
关于压缩后字符串写入clickhouse再读取后无法反解压的问题