这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天,今天学习的课程是ClickHouse - 你没有见过的列存储。
一,ClickHouse特点
1.列式存储
列存的优点
a. 数据压缩
- 数据压缩可以使读的数据量更少,在IO密集型计算中获得大的性能优势
- 相同类型压缩效率更高
- 排序之后压缩效率更高
- 可以针对不同类型使用不同的压缩算法
- 几种常见的压缩算法
b. 数据处理
【查询优化】1.可以选择特定的列做计算而不是读所有列 2.对聚合计算友好
【延迟物化】
- 物化:将列数据转换为可以被计算或者输出的行数据或者内存数据结果的过程,物化后的数据通常可以用来做数据过滤,聚合计算,Join
- 缓存友好
- CPU / 内存带宽友好
- 可以利用到执行计划和算子的优化,例如filter
- 保留直接在压缩列做计算的机会
列存 VS 行存
2.DBMS的功能
- 几乎覆盖了标准SQL的大部分语法,包括 DDL和 DML ,以及配套的各种函数。
- 用户管理及权限管理
- 数据的备份与恢复
3.多样化引擎
clickhouse和mysql类似,把表级的存储引擎插件化,根据表的不同需求可以设定不同的存储引擎。目前包括合并树、日志、接口和其他四大类20多种引擎。
4.高吞吐写入能力
ClickHouse采用类LSM Tree的结构,数据写入后定期在后台Compaction。通过类LSM tree的结构,ClickHouse在数据导入时全部是顺序append写,写入后数据段不可更改,在后台compaction时也是多个段merge sort后顺序写回磁盘。顺序写的特性,充分利用了磁盘的吞吐能力,即便在HDD上也有着优异的写入性能。
官方公开benchmark测试显示能够达到50MB-200MB/s的写入吞吐能力,按照每行100Byte估算,大约相当于50W-200W条/s的写入速度。
5.数据分区与线程级并行
ClickHouse将数据划分为多个partition,每个partition再进一步划分为多个index granularity,然后通过多个CPU核心分别处理其中的一部分来实现并行数据处理。
在这种设计下,单条Query就能利用整机所有CPU。极致的并行处理能力,极大的降低了查询延时。
所以,clickhouse即使对于大量数据的查询也能够化整为零平行处理。但是有一个弊端就是对于单条查询使用多cpu,就不利于同时并发多条查询。所以对于高qps的查询业务,clickhouse并不是强项。
6.关联查询
clickhouse像很多OLAP数据库一样,单表查询速度由于关联查询,而且clickhouse的两者差距更为明显。