一、什么是ClickHouse
ClickHouse开源于2016年,底层是使用C++编写, 是一款高性能列式分布式数据库管理系统,相对于业界其他的OLAP数据库。ClickHouse吸收了很多主流优秀数据库的精髓。实时查询性能做到了极致。目前,国内外许多大厂公司都在深度使用ClickHouse技术;官方评估比事务数据库快100-1000倍,最大的特色是高性能的向量化执行引擎,而且功能丰富、可靠性高。
其他主流OLAP数据库还包括:TeraData、Greenplum、presto、druid等,此外,还有大数据系统支持OLAP功能,例如hive等,但是它们更聚焦海量数据的离线分析。而OLAP数据库更关注在线实时分析。目前主流的开源OLAP产品如下图
二、ClickHouse主要特性
ClickHouse核心架构如下,主要功能模块包括Column、DataType、Block、Functions、Storage、Parser与Interpreter。
接下来详细介绍ClickHouse的核心特点
1、完备的DBMS功能
-
DDL ( 数据定义语言 ):可以动态地创建、修改或删除数据库、表和视图。
-
DML ( 数据操作语言 ):可以动态查询、插入、修改或删除数据。
-
权限控制:可以按照用户粒度设置数据库或者表的操作权限,保障数据的安全性。
-
数据备份与恢复:提供了数据备份导出与导入恢复机制,满足生产环境的要求。
-
分布式管理:提供集群模式,能够自动管理多个数据库节点。
2、列式存储
行存储和列存储到底是什么?其实它是数据库底层组织数据的方式。行存储系统以行的方式来组织数据,使用场景OLTP;列式存储将每一列的数据组织在一起。适用大数据海量数据OLAP。
clickhouse采用列式存储方式,有两个特性自动索引(无需创建额外索引)和利于压缩数据。将硬件功效最大化,增加了高性能查询和存储。
3、数据压缩
clickhouse数据压缩主要使用两个方案LZ4和ZSTD,LZ4解压缩速度上会更快,但压缩率较低,ZSTD解压缩较慢。但是压缩比例较高。
4、向量化执行
为了实现向量化执行,需要利用CPU的SIMD指令。SIMD的全称是Single Instruction Multiple Data,即用单条指令操作多条数据。现代计算机系统概念中,它是通过数据并行以提高性能的一种实现方式 ( 其他的还有指令级并行和线程级并行 ),它的原理是在CPU寄存器层面实现数据的并行操作。
在计算机系统的体系结构中,存储系统是一种层次结构。典型服务器计算机的存储层次结构如图1所示。一个实用的经验告诉我们,存储媒介距离CPU越近,则访问数据的速度越快。
距离CPU越远,则数据的访问速度越慢。从寄存器中访问数据的速度,是从内存访问数据速度的300倍,是从磁盘中访问数据速度的3000万倍。所以利用CPU向量化执行的特性,对于程序的性能提升意义非凡。ClickHouse目前利用SSE4.2指令集实现向量化执行。
OLAP场景的核心特征(总结)
1、查询效率极高,尤其单表。join性能不高但可以自行优化。适用多请求多,写操作少的场景
2、ClickHouse数据压缩率低,占用磁盘资源小
3、分布式处理数据,采用MPP架构。
4、不支持事务
5、ClickHouse并发能力,通过增加节点方式去增加并发能力
6、ClickHouse Join优化,大部分多表Join的SQL都需要改写,比如把Join改为子查询,改为本地表Join,设置distributed_group_by_no_merge去做分布式GroupBy等,改写之后的性能比较好,但大表和大表的Join在右表数据量达到千万级别之后,性能会急剧下降。
三、ClickHouse实践应用
1、可视化大屏
字节跳动广告业务可视化大屏案例。广告的投放数据,一般是运营同学需要查看广告投放的实时效果。数据量大并且实时性要求比较高。早期采用Druid+Superset 方案。目前优化改造成CK+自研BI系统方法+KafKa
2、日志分析实践
早期,携程利用elasticsearch处理日志分析业务,随着业务量的扩大,服务日志量激增,暴露出很多问题。第一个是由于ES集群需要更多的服务器资源。第二个是查询性能不佳。因此携程在日志分析上有了新的探索,引入CK技术方案。当然ES在日志的领域绝对还是占据主导技术地位的。
为什么选择ck呢?ck比es有哪些优势呢
1、ClickHouse相对ES占用内存小。ES为了提高查询效率会将很多数据放在内存中,当数据到一定量级更需要扩容,运维成本大
2、查询效率高,ES是近实时查询,ck比ES提升了4.4倍到38倍不等。
3、磁盘占用小,由于ck数据压缩性能优。
与此同时,clickhouse在携程酒店数仓也有实践,并且有二次开发代码优化。资料如下:
https://blog.csdn.net/qq_41893274/article/details/117339870
3、实时数仓建设
京东OLAP方法采取ClickHouse为主 Doris为辅的策略,每日亿次查询万亿条数据写入,广泛服务于用户分析、实时推荐、大促大屏、运营分析等各个业务场景,经过历次大促考验,提供了稳定的服务。
京东OLAP高可用架构两种方案: 1) 单集群高可用架构 2) 双活集群方案