第二章已经向读者说明了,影响olap查询速度的瓶颈其实是在磁盘。并且也给出了两种具备代表性的优化方案,分别是分布式和列存。之后大部分的olap数据库都采用了类似的架构,那么凭什么clickhouse能从这些olap数据库中脱颖而出摘得桂冠呢?从本章开始,本系列将逐渐向读者展示clickhouse的精妙设计。
Block + LSM
其实本节的标题也可以换成批处理+预排序。clickhouse通过block的设计来实现批处理,通过lsm算法来实现预排序。我们分别来分析一下,这个组合对查询速度的影响。
首先,我们分析有序存储和无序存储对查询速度的影响。我们一般在做查询时,大致可以分为按值查询和按范围查询两种。
有序存储 | 无序存储 | |
按值查询 | 1次读取 | 1次读取 |
按范围查询 | 1次读取 | n次读取 |
两种查询对的磁盘访问
从表中可以看出,在都使用了索引的情况下,如果是按值查询那么有序存储和无序存储基本都能做到一次磁盘IO就能实现数据读取。但按范围读取,因为是有序存储,因此只需要一次对磁盘的访问即可读取所有数据。而对于无序存储的数据来说,最坏的情况可能