searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

漫谈ClickHouse技术

2023-05-24 09:57:27
98
0

一、什么是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) 双活集群方案 

 

 

0条评论
0 / 1000
m****m
5文章数
0粉丝数
m****m
5 文章 | 0 粉丝
m****m
5文章数
0粉丝数
m****m
5 文章 | 0 粉丝
原创

漫谈ClickHouse技术

2023-05-24 09:57:27
98
0

一、什么是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) 双活集群方案 

 

 

文章来自个人专栏
大数据ClickHouse
5 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0