超快!大数据分析引擎ClickHouse

2021-01-18 15:04:47 浏览数 (1)

有格局的人会想着如何把蛋糕做大,而不是如何从眼前的蛋糕中多分一点。

一、什么是ClickHouse?

ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。

对于存储而言,列式数据库总是将同一列的数据存储在一起,不同列的数据也总是分开存储。

常见的列式数据库有:Vertica、 Paraccel (Actian Matrix,Amazon Redshift)、 Sybase IQ、 Exasol、 Infobright、 InfiniDB、 MonetDB (VectorWise, Actian Vector)、 LucidDB、 SAP HANA、 Google Dremel、 Google PowerDrill、 Druid、 kdb 。

二、传统分析数据库的解决方案:

1、传统面对大数据量的处理方式:对数据进行分层,通过层层递进形成数据集市,从而减少最终查询的数据体量,比如提出数据立方体概念,通过对数据进行预先处理,以空间换时间,提升查询性能。

2、OLAP分类

关系型ROLAP:使用关系型模型构建,数据模型常使用星型模型或雪花模型

多维型MOLAP:使用多维数组的形式保存数据,其核心思想是借助预处理聚合结果,使用空间换时间的形式提升查询性能

混合架构HOLAP:可以理解ROLAP和MOLAP两者集成

三、一匹横空出世的黑马ClickHouse

ClickHouse(全称:Click Stream,Data WareHouse)具有ROLAP、在线实时查询、完整的DBMS、列式存储、不需要任何数据预处理、支持批量更新、非常完善的SQL和函数支持、支持高可用、不依赖Hadoop生态及开箱即用等特点。

ClickHouse 历史演化过程:

Mysql时期->另辟蹊径的Metrage时期->自我突破的OLAPServer时期->水到渠成的ClickHouse时期

1、MySQL时期:

采用MyISAM表引擎,采用B 数结构存储索引,而数据文件使用另外单独的存储文件,(区别于InnoDB表引擎使用B 树同时存储索引和数据,数据直接挂载在叶子节点中)

2、Metrage时期:

数据模型层面:关系型模型改为Key-Value模型

索引层面:LSM树代替了B 树

数据处理层面:实时查询改为预处理方式

使用LSM树最具代表性的是Hbase数据库,LSM本质可以看成将原本一颗大树拆成了许多颗小树,每一批次写入的数据会在内存中构建出一个小树,构建完成即完成写入(这里会通过预写日志的方式,防止内存故障而导致数据丢失),写入数据只发生在内存,不涉及磁盘操作,所以极大的提高了写入速度。

3、OLAPServer时期:

设计思路:取众家之长

数据模型:换回了关系型,理由:关系型有更好的描述能力

存储层面:与MyISAM表引擎类似,分为索引文件和数据文件

索引层面:沿用LSM树,将索引文件和数据文件按列进行拆分,每个列字段独立存储。

四、ClickHouse(全称:Click Stream,Data WareHouse)

1、ClickHouse适用场景:

非常适用商业智能领域,也广泛应用于广告流量、web、app流量、电信、金融、电子商务、信息安全、网络游戏、物联网等

2、ClickHouse不适用场景:

不支持事务

不擅长根据主键按行粒度查询(虽然支持),所以不应该把ClickHouse当作Key-Value数据库使用

不擅长按行删除数据(虽然支持)

五、ClickHouse架构详解

ClickHouse是一款MPP架构的列式存储数据库,汲取了各家技术的精髓,将每一个细节做到了极致。

1、完备的DBMS(数据库管理系统)功能

DDL(数据库定义语言):可以动态的创建数据库、表和视图

DML(数据库操作语言):动态的查询、新增、修改及删除数据

权限控制、数据备份与恢复、分布式管理等

2、列式存储与数据压缩

不同的列保存在不同的文件中,数据中的重复项越多压缩率就越高,数据的体量就越小,传输就越快,对网络带宽和磁盘IO的压力就越小,使用LZ4算法压缩,压缩率达8:1.

3、向量化执行引擎

向量化引擎可以简单的理解做一项消除程序中循环的优化,原理是在寄存器层面的并行操作,寄存器的访问速度是内存的300倍,硬盘的3000万倍。

4、关系模型与SQL查询

关系模型(包括星型模型、雪花模型乃至宽表模型)相当于其它模型有更好的数据描述能力,另外注意ClickHouse SQL语法区分大小写。

5、多样化的表引擎

拥有合并数、内存、文件、接口和其他六大类20多种表引擎,每种引擎都有各自的特点,适用于不同的场景。

6、多线程与分布式

如果说向量化执行是通过数据级并行方式提升了性能,那么多线程处理就是通过线程级并行方式实现了性能提升,相比底层硬件实现的向量化执行SIMD(单个指令处理多条数据),线程级并行方式由高层次的软件层面控制。

分布式设计的思想是分而治之,在分布式有一条金科定律:移动计算比移动数据更划算。

在存储方面ClickHouse既支持分区(纵向扩展,利用多线程原理),也支持分片(横向扩展,利用分布式原理),可以说将多线程和分布式技术应用到了极致。

7、多主架构

HDFS、Spark、Hbase和ElasticSearch这类分布式系统都采用了Master-Slave主从架构,由一个节点管控,而ClickHouse采用多主架构,客户端访问任何一个节点都能得到相同的结果。

8、在线查询

能够做到急速响应,且无须对数据进行任何预处理加工。

9、数据分片与分布式查询

数据分片是一种将数据横向切分,ClickHouse提供了本地表(Local Table)和分布式表(Distributed Table),本地表相当于一份数据分片,而分布式表本身不存储任何数据,它是本地表的访问代理,其作用类似分库中间件,借助分布式表可访问多个本地表,从而实现分布式查询。

六、ClickHouse的设计原则,如此之快的秘诀

1、着眼硬件,先想后做

2、算法在前,抽象在后

3、勇于尝鲜,不行就换

4、特定场景,特殊优化

5、持续测试,持续改进

0 人点赞