ClickHouse入门学习-基础概念篇
- Clickhouse简介
ClickHouse官方文档:https://clickhouse.yandex/docs/en/ 中文版翻译看起来很难受。
ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS Database Management System)。
ClickHouse是一个MPP数据库(Massively Parallel Processing)。
MPP架构是将任务并行的分散到多个服务器和节点上,在每个节点上计算完成后,将各自部分的结果汇总在一起得到最终的结果。 - 应用场景
在OLAP的场景中,基于hadoop的生态圈是可以通过HBase,HDFS,Hive得到一套解决方案的,但是底层依托于Hadoop的生态系统。
CK则是跳出了Hadoop的生态圈,也能提供OLAP的解决方案,还比Hive快上200倍。 - OLAP场景的特点
多读于写(主要还是做查询分析)
数据表大,每行列数目居多,但是每次使用仅仅是其中少量列
数据以少次大量写入,或者几乎不写入,不讲究时效性而讲究吞吐量。
不需要支持事务,对数据一致性要求低 - ClickHouse特点(OLAP的前提下,某些特点也就成为了必备)
列式存储,吞吐量大
1 在OLAP的前提下(大表列多,但是每次查询使用的列不多),列存储使得相关数据存储相临,转化成了顺序I/O,速度得到提升。
2 同一列的数据类型都相同,那么对于压缩,速度更快,压缩之后体积更小,那么I/O的速度进一步提升
不支持事务
因为数据不会涉及到频繁的改动跟高并发,所以无需支持事物,自然就减少了事物操作带来的复杂性,提升效率。
主键,稀疏索引,数据有序存放
根据主键,将数据按照一定的顺序存放,保存在临近的一个或者多个block,也为顺序I/O提供支持。
稀疏索引使用index granularity(默认8192)通过对应的主键来标注数据,类似与抽样标注。通过二分查找可以快速定位。
这里会涉及到做索引的值,优先让稀疏的值在前面,建立索引可以是具体的列,也可以是一系列的组合函数比如说toYYMM(date)。![]()
图1
值得注意的是ck的主键跟mysql的主键不完全一样,ck的主键不能去重跟表示唯一。但是可以通过特定的引擎来实现去重。
在底层实现中,每一列都会生成.bin跟.mrk是mark number跟offset。
数据分片,数据分区
可以将数据存储在不同的分片上,来作为扩展,同时可以使用多台服务器的资源,在某中程度上实现了高可用,但是会出现部分不可用。
分区是为了在一个大文件的基础上,根据规则拆分为多个小块文件,这样在数据加载的时候可以选择性的加载。
数据TTL
淘汰策略,当时间到了,自动清除掉多余的数据。
有限的支持update跟delete操作
没有直接提供update跟delete,而是通过alter table来变相实现,并且是异步实现。
由副本提供高可用
副本是服务器级别的,不是服务级别的,也就是说只会在当前服务器建立,不会同步到整个服务,也可以提供查询服务,而不止是备份作用。
多核并行计算
ck强调服务器资源的使用,默认情况下任何一个查询都是使用服务器一半以上的cpu进行并行运算的,这也是为什么不支持高并发的原因之一。
分布式计算
可以搭建分布式集群,那么就可以协同操作,最后将结果汇总,这样可以尽可能的使用服务器资源。
向量化执行跟SIMD
在列存储的基础上,那操作的数据类似,对于函数处理的效率会有很大的提升。 - 个人思考总结。主要考虑的问题,就是ck为什么这么快?
列一份数据![]()
图2
可以分成几个方面:
1 硬件的使用
CPU,每次查询都会使用服务器一半以上的CPU进行并行运算,这就使得ck拥有足够的计算能力,并且是支持集群分片的,那么计算能力也是成倍的提升。
I/O,主要得益于在OLAP的前提下采用列式存储,能够提高读出数据的有效占比。
2辅助手段
列式存储,通过主键排序存储,稀疏索引以及分区的手段来提高查询效率,并且更准确的找到真正需要的数据,那么I/O的数据量也会减少。
采用了压缩技术,因为列存储,所以压缩的数据都是相同类型,那么压缩的效率会更高,如果需要调用函数,那么也可以用向量引擎,批量调用提升效率。
舍弃事物,在OLAP的前提下,事物不是必须的,所以不必保证ACID,那么就降低了系统的复杂度,效率得到提升。
数据的改动,包括删除跟修改,都会对历史的数据有印象,那么数据的存储,索引这些都会变动,涉及到一系列的操作,并且有可能出现数据错误。所以不直接提供实时的数据修改跟删除,只有变相异步的方案。
强大的引擎,ck里面存在多种针对不同场景的引擎。
我个人理解有点预处理的思想,不同的引擎会在数据插入或者查询的时候进行不同的优化,比如异步聚合,版本控制,提供逻辑表,都可以提升查询跟计算效率。
引用:
图1从官网引用
https://clickhouse.tech/
图2引用自
https://zhuanlan.zhihu.com/p/22165241


浙公网安备 33010602011771号