一、 架构设计
1、 MPP架构(海量数据并行处理架构),share nothing模式,每个节点访问自己的cpu、内存、磁盘,且与节点之间的数据访问并行。
2、 向量执行引擎,从寄存器硬件层面优化,采用数据并行,速度提升指数级别。采用cpu缓存作为临时交换数据,速度比内存交换数据还要快。
3、 列式存储和数据压缩
4、 支持sql查询,采用关系型模型描述数据
5、 支持表引擎,将数据存储抽象成独立的接口,根据实际应用场景,选择适合的表引擎。
6、 多线程和并发处理数据,线程级别并行处理数据,横向上将表分片(即分成多节点),纵向上将表进行分区。
7、 多主架构,每个节点角色对等,客户端访问任一节点都能得到相同的效果
8、 支持实时查询
9、 支持分布式查询,支持分片,采用分治思想,横向切分,分片依赖于集群,分片的数量取决于集群节点数。Clickhouse提供本地表和分布式表,分布式表不存储数据,是本地表的访问代理,一张本地表就是一份数据分片。
10、 架构设计
Clickhouse为什么有这么高的性能

1) column、field,基础的映射单元。Ch按列存储,内存中一列数据由一个column对象表示。大多数情况下,ch会以整列的方式操作数据,但是如果需要操作某列中的单个具体数值,要用field对象,代表一个单值。
2) column对象采用泛化设计,对象分为接口和实现。接口定义了对数据进行各种关系运算的方法,这些方法的实现,根据数据类型的不同,由相应的对象实现。
3) field对象使用了聚合的设计模式,聚合了Null、UInt64,String和Array等多种数据类型和对应的处理逻辑
4) DataType,主要执行数据的序列化和分序列话工作
5) Block对象,由column、datatype、列名称组成的三元组。Ch内部数据操作是面向block对象进行的。Block对象可看做数据表子集。

二、 高性能秘诀
1、 硬件层面,数据结构优化
2、 算法是重中之重,比如根据不同的数据规模选择不同的数据结构
3、 具体问题具体分析,不同的应用场景选择不同的实现方式

相关文章: