1: 简介

ClickHouse 是俄罗斯的Yandex于2016年开源的列式存储数据库(DBMS),使用C++语音编写,主要用于在线分析处理查询(OLAP),能够使用SQL查询实时生成分析数据报告。

官网地址: ​​https://clickhouse.com/​

官方文档(中文): ​​https://clickhouse.com/docs/zh/introduction/distinctive-features/​

2: 特点

2.1: 列式存储

 2.1.1 采用行式存储时

ClickHouse 简单介绍_数据

一行行存储数据,一行就是对应一个对象的所有数据。

2.1.2 采用列式存储时

ClickHouse 简单介绍_列式存储_02

将一列的数据顺序排列,这样当我们查询想要的字段的时候,只需要将那一列拿出来就可以了。

2.1.3 好处
  1. 对于列的聚合,计数,求和等统计操作原因优于行式存储
  2. 由于某一列的数据类型都是相同的,针对数据存储更容易进行数据压缩,每一列选择更优的数据压缩算法,提高了数据的压缩比例
  3. 由于数据压缩比更好,节省了空间,对cache也有更大的发挥空间

2.2: DBMS功能

几乎涵盖了标准SQL的大部分语法,包括DDL和DML,以及各种函数,用户管理和权限管理,数据的备份和恢复。

2.3: 多样化的引擎

ClickHouse和MySQL类似,把表级的存储引擎插件化,根据表的不同需求可以设定不同的存储引擎。目前包括合并树,日志,接口和其他四大类的20多种引擎

2.4: 高吞吐写入能力

ClickHouse采用了类LSM Tree的结构,数据写入后定期在后台压缩(Compaction),通过类LSM Tree的结构,ClickHouse在数据导入时全部是顺序append写,写入后台数据段不可更改,在后台压缩时,也是多个段merge sort 后顺序写回磁盘。顺序写的特性,充分利用了磁盘的吞吐能力。

2.5: 数据分区与线程级并行

ClickHouse 将数据划分为多个partition(分区),每个分区再进行一步划分为多个index granularity(索引粒度),然后通过多个CPU核心分别处理其中的一部分来实现并行数据处理。在这种设计中,单条查询就能利用整机的所有CPU, 降低了查询的延迟。虽然ClickHouse能够对大量的数据能够分而治之平行处理,但是对于单条查询使用多CPU,就不利于同时并发多条查询。所以高QPS的查询业务,ClickHouse 不是其强项。

3: 总结

总的来说,ClickHouse 的功能还是非常强大的。采用列式存储,能够快速对一列的数据进行操作。同时它还支持DBMS的特性和SQL支持,同时还有多元化的引擎,帮助数据很多的存储,采用了CPU多核操作处理数据,降低了查询的延迟。为了追求查询的极致,导致了其对并发不是很好,同时也不支持事务。每一项技术都有自己的优缺点,合适自己的才是最好的。