ClickHouse基础、实践、调优全视角解析(part6-性能奥秘)

发布于 4 个月前 作者 ifengkou 968 次浏览 来自 社区优选

Clickhouse 性能奥秘

如上述表格所示,传统的 MySQL 数据库的每一行数据都是物理的存储在一起的。如果我要取 id 等于 10000 这一条数据的 name 列,那我就必须要把这一行数据读取出来,然后取 name 列。

再比如,下面的 SQL:

p640.jpeg

在众多的数据中,我只取一列,但我需要把每条数据都读取出来。

基于上面传统数据库的一些特点,ClickHouse 另辟蹊径,推出了列式存储。 p640.png

看上图的列式存储示例,完全和 MySQL 等数据库不同。当我执行下面的 SQL 时,查询效率非常的高!

p640-2.png

由于 name 列的数据都存储在一起,因此效率大大的超过了传统的数据库。

p640-3.png

除了逻辑上的不同,磁盘上的组织结构也大不一样。

p640-2.jpeg

除了列式存储上的不同,ClickHouse 还有高效的数据压缩,默认使用LZ4算法,总体压缩比可达 8:1。ClickHouse 还采用了分布式多主架构提高并发性能,ClickHouse使读请求可以随机打到任意节点,均衡读压力,写请求也无需转发到******节点,不会产生单点压力。

p640-3.jpeg

ClickHouse 还有向量引擎,利用 SIMD 指令实现并行计算。对多个数据块来说,一次 SIMD 指令会同时操作多个块,大大减少了命令执行次数,缩短了计算时间。向量引擎在结合多核后会将 ClickHouse 的性能淋漓尽致的发挥出来。

ClickHouse 在索引上也有不同,采用了稀疏索引及跳数索引。同时还有很多 MergeTree,提供海量业务场景支持。

基于以上特点,ClickHouse 在包含 count、sum、group by、order by 等情况的查询对比,同等条件下,ClickHouse 的查询性能异常强悍,官网上的数据显示,是同等条件下 MySQL 的 831 倍。 p640-4.jpeg

1 回复

clickhouse 列式存储时,每一列是单独的文件,上面在磁盘上的组织结构为示意图

回到顶部