目录
我们都知道,框架的设计可以分为自顶向下和自下而上,在传统观念中,或者说在我的观念中,做架构设计首先自然做的是顶层设计:
-
事先应该做高层次的抽象设计;
-
规划好各个模块的职责、切分的界面;
-
分配好工程结构、包结构,最好能再来一些设计图,等等。
-
而ClickHouse的设计,则采用了 自下而上。
-
他们是如何实践 自下而上 设计的呢?
从硬件功能层面着手设计,在设计伊始,就至少需要想清楚这么几个问题:
-
我们将要使用的硬件水平是怎样的?包括CPU、内存、硬盘、网络等等;
-
在这样的硬件上,我们需要达到怎样的性能?包括延迟、吞吐量等等;
-
我们准备使用怎样的数据结构?包括String、HashTable、Vector等等;
-
选择的这些数据结构,在我们的硬件上会如何工作?
别小看这些细节,一点一滴的将它们累加起来,数据是非常可观的。也正因为注意了这些细节,所以ClickHouse在基准查询中,能做到1.75亿/每秒的数据扫描性能。那下面我将从如下几点来分享ClickHouse为什么如此之快。
1.高层次架构
1.1 shared nothing
shared noting 是一种分布式计算架构。在这种架构中,每一个节点都是独立的,自给的,在系统中不存在单点竞争。更明确地说,没有节点共享存储和硬盘。
1.2 并行计算
多核多节点并行化大型查询,也便于扩容。
1.3 列式存储
不同的列存储在不同的文件。
1.4 Merge Tree
ClickHouse支持主键表,为了快速执行对主键范围的查询,数据使用合并树进行递增排序。由于