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

1. 什么是ClickHouse?

引用官网中文文档中的介绍:https://clickhouse.com/docs/zh/

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

注意,它强调的是列式数据库。传统的数据库如oracle、mysql、postgresql等都是行式数据库,一条记录即为一行,而一行的数据在磁盘上是存储在一起的。

假设有如下表:

RowIDNameAge
01张三16
12李四20
N3王五18

行式数据库 中,则是一行存储在一起,比如第一条数据 ID=1,Name=张三,Age=16,被存储在一起(如果你了解数据库的聚集索引或者称为主键索引,你就知道在BTree中叶子节点存储一条记录的所有信息)

而在 列式数据库 中,则是同一列的数据据存储在一起,不同列的数据单独存储,比如表中的第一列数据ID=1,ID=2,ID=3的这一列被存储在一起,其他列被分开,这便是列式数据库的存储方式。

这样做有什么好处呢?下面将介绍到。

2. clickhouse如何实现高性能的?

1)列式存储和数据压缩

列式存储上面已经介绍过了,下面介绍一下数据压缩,压缩的本质是按照一定步长对数据进行匹配扫描,当发现重复部分的时候就进行编码转换,比如有下面一段字符:

压缩前:abcdefghijk_bcdefghijk

压缩后:abcdefghijk_(11,10)

将重复的字符 bcdefghijk 压缩成(11,10)这样的编码,表示从下划线向前移动11个字符为会匹配到10个重复的内容,当然真实的压缩算法肯定要比这个复杂的多,这里只是简单说明。

所以在数据压缩的过程中重复的数据越多,压缩率就越高,那么在列式存储中,同一列都是相同类型的数据,重复的可能性也就越高,压缩后的数据体量也就越小。

2) 多核心并行处理,多服务器分布式处理

多核心并行处理

ClickHouse会使用服务器上一切可用的资源,从而以最自然的方式并行处理大型查询

ClickHouse将数据划分为多个partition,每个partition再进一步划分为多个index granularity,然后通过多个CPU核心分别处理其中的一部分来实现并行数据处理。

在这种设计下,单条Query就能利用整机所有CPU。极致的并行处理能力,极大的降低了查询延时

多服务器分布式处理

在ClickHouse中,数据可以保存在不同的shard上,每一个shard都由一组用于容错的replica组成,查询可以并行地在所有shard上进行处理

3) 向量化执行引擎

为了高效的使用CPU,数据不仅仅按列存储,同时还按向量(列的一部分)进行处理,这样可以更加高效地使用CPU。

向量化执行,可以简单地看作一项消除程序中循环的优化,比如我们要循环打印1~8的数字,我们可能会写一个for循环,在一台电脑上循环8次打印数字,而在向量化执行中,则是同时8台电脑一次调用打印方法,这个例子可能不太恰当,大致是这个意思。

以下内容参考自 https://cloud.tencent.com/developer/article/1842221

为了实现向量化执行,需要利用CPU的SIMD指令。SIMD的全称是Single Instruction Multiple Data,即用单条指令操作多条数据。现代计算机系统概念中,它是通过数据并行以提高性能的一种实现方式 ( 其他的还有指令级并行和线程级并行 ),它的原理是在CPU寄存器层面实现数据的并行操作。

在计算机系统的体系结构中,存储系统是一种层次结构。典型服务器计算机的存储层次结构下图所示。一个实用的经验告诉我们,存储媒介距离CPU越近,则访问数据的速度越快

在这里插入图片描述

从上图中可以看到,从左向右,距离CPU越远,则数据的访问速度越慢。从寄存器中访问数据的速度,是从内存访问数据速度的300倍,是从磁盘中访问数据速度的3000万倍。所以利用CPU向量化执行的特性,对于程序的性能提升意义非凡。

ClickHouse目前利用SSE4.2指令集实现向量化执行 SSE是一种SIMD指令集。

关于clickhouse的性能方面,可以参考它官网做的测试 https://benchmark.clickhouse.com/

3. clickhouse的缺点

1)不支持事务,不支持真正的删除/更新,它是一个在线分析系统(OLAP)事务并不是它所需要的,另外,数据一般是不变的,因此Clickhouse对update、delete的支持是比较弱的,实际上并不支持标准的update、delete操作,Clickhouse通过alter方式实现更新、删除,它把update、delete操作叫做mutation(突变)

2)不支持高并发,官方建议qps为100,可以通过修改配置文件增加连接数,但是在服务器足够好的情况下

3)SQL满足日常使用80%以上的语法,但是在关系型数据库中的一些较复杂的语法可能无法使用。

4)由于它的向量化执行引擎依赖CPU指令集,所以对操作系统也有一定的要求。

4. clickhouse适用场景

1) 海量数据的存储与统计

2) 日志分析、用户行为分析等

参考:

https://cloud.tencent.com/developer/article/1842221

https://clickhouse.com/docs/zh/introduction/distinctive-features

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员柳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值