赞
踩
文末送书!
导读:ClickHouse速度快的秘诀在于——利用存储引擎的特殊设计充分减少磁盘I/O对查询速度的影响。
ClickHouse为什么查询速度快?本文来揭秘。
作者直播,一键预约
01
从存储引擎视角看
ClickHouse速度快的秘诀在于——利用存储引擎的特殊设计充分减少磁盘I/O对查询速度的影响。从用户提交一条SQL语句进行查询到最终输出结果的过程中,大量的时间是消耗在了磁盘I/O上,在很多情况下,I/O所占用的时间可以达到整个时间的90%以上。对存储引擎磁盘I/O的优化可以获得非常大的收益。ClickHouse的存储引擎设计中大量优化的目的也是为了减少磁盘I/O。本节将从该视角对ClickHouse存储引擎的优化进行解读。
02
从计算引擎视角看
不同于存储引擎的设计,ClickHouse计算引擎的设计在很多方面都有着很大的争议,一方面向量化引擎的精妙设计让人拍案叫绝,另一方面相对粗糙的SQL解析和优化(解释)器也让ClickHouse在执行某些操作时让用户咬牙切齿。
- SELECT (2/(1.0 + exp(-2 * x))-1) as tanh_x …… // 错误的写法
- SELECT tanh(x) as tanh_x …… // 正确的写法,直接使用ClickHouse的内置函数
ClickHouse在满足上面提到的两个条件时,在不考虑存储引擎影响的情况下,应当能够在计算引擎上达到最大的性能。ClickHouse计算引擎快的本质是利用了CPU提供的硬件加速特性。
除此之外,ClickHouse客观上的确在一些环节存在着一些问题,个人认为这些问题和ClickHouse的定位有关。ClickHouse在设计之初就给自身进行了清晰的定位——充分发挥单机性能的OLAP引擎。在此基础上,分布式的join能力其实并不重要,毕竟业界已经有Spark了,完全可以将ClickHouse建立在Spark之上,由Spark解决建模问题,由ClickHouse强大的DW分析能力实现OLAP的最后一公里问题。
作为用户,我们应该清晰地了解ClickHouse速度快的前提,有意识地避开ClickHouse的雷区,不要将ClickHouse用于其不擅长的场景。正如此时此刻,大家都意识到了MySQL无法解决大数据量的OLAP问题,这类问题要通过专业的OLAP引擎解决。
开源社区要的并不是什么能力都有的但都不强的平庸的软件,而是百花齐放,各自有着各自擅长的领域,通过组合实现架构上的合力。以上仅代表作者个人观点,欢迎读者有不同意见,大家互相讨论。
03
总结
本文分别对ClickHouse的存储引擎和计算引擎进行了简单分析,分别得出了ClickHouse速度快的不同的前提。
存储引擎需求的前提如下。
使用MergeTree存储引擎。
按照业务需求,正确设置数据表的排序键,查询时需满足最左原则。
计算引擎架构要求的前提如下。
没有或少用Join操作。
尽可能多地使用内置函数。
当满足如上4个条件时,使用ClickHouse才有可能达到比较优秀的性能。
关于作者:陈峰,资深大数据专家和架构师,ClickHouse技术专家,滴普科技(2B领域独角兽)合伙人兼首席架构师。《ClickHouse性能之巅:从架构设计解读性能之谜》作者。
推荐语:滴普合伙人兼首席架构师/资深ClickHouse专家撰写,从架构剖析ClickHouse底层逻辑,总结大量性能调优方法
直播间新书限时5折发售,一键预约
粉丝福利
如何获得书籍?
因为公众号回复抽奖有职业羊毛党专门撸书,所以峰哥决定在朋友圈让大家参与,一方面限制羊毛党,另外一方面也能控制参与人数,让大家中奖几率更大。
已经加我微信的同学,我会将抽奖链接发到朋友圈里,大家记得及时参与。不是我好友的,可以添加下方微信,备注【书籍】我会通过,通过之后大家直接去朋友圈参与即可。
▲添加上方二维码好友▲
▲备注「书籍」,参与抽奖▲
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。