1. clickhouse核心概念
发布于 2022年 01月 18日 18:03
一. ClickHouse概述篇
1.1 什么是ClickHouse
ClickHouse是俄罗斯的Yandex于2016年开源的一个用于联机分析(OLAP:Online Analytical Processing)的列式数据库管理系统,主要用户在线分析处理查询(OLAP),能够使用SQL查询实时生成分析数据报告。
ClickHouse是一个完全的列式数据库管理系统,允许在运行时创建表和数据库,加载数据和运行查询,而无需重新配置和重新启动服务器,支持线性扩展,简单方便,高可靠性,容错。他在大数据领域没有走Hadoop生态,二十采用Local attached storage作为存储,这样真个IO可能就没有Hadoop那一套局限。他的系统在生产环境中可以应用到比较大的规模,因为它的线性扩展能力和可靠性保障能够原生支持shard+replication这种解决方案。它还提供了一些SQL直接接口,有比较丰富的原生client。另外就是它比较快。
快的原因有以下几方面因素:
a. 它的数据减枝能力比较强,区分剪枝在执行层,而存储格式用局部数据表示,就可以更细粒度地做一些数据的剪枝。它的引擎在实际使用中应用了一种现在比较流行的LSM方式。
b. 它对整个资源的垂直整合能力做的比较好,并发MPP+SMP这种方式可以很充分地利用机器的集成资源。它的实现又做了很多性能相关的优化。它的一个简单的汇聚操作有很多不同的版本,会更具不同Key的组合方式有不同的实现,对于高级的计算指令,数据解压时,它也有少量使用。
c. ClickHouse是一套完全由C++模板Code写出来的实现,代码还是比较优雅的。
d. ClickHouse是一个完全的列式数据库
1.2 ClickHouse几大特点
a. 分布式数据库
b. 自己管理数据、也可以读取别的类型数据库的,mysql、hdfs、网络、本地文件
c. 存储海量数据
d. 解决并发
e. 列式存储
1.2.1 数据压缩
在一些列示数据管理系统中(例如:InfiniDB CE和MonetDB)并没有使用数据压缩。但是,若想达到比较优异的性能,数据压缩确实起到了至关重要的作用。
1.2.2 数据的磁盘存储
许多的列示数据库(如SAPHANA,Google PowerDrill)只能在内存中工作,这种方式会造成比实际更多的设备预算。ClickHouse被设计用于工作在传统磁盘上的系统,它提供每GB更低的存储成本,但如果由可以使用SSD和内存,它也会合理的利用这些资源。
1.2.3 多核心并行处理
ClickHouse会使用服务器上一切可用的资源,从而以最自然的方式并行处理大型查询。
1.2.4 多服务器分布式处理
上面提到的列式数据库管理系统中,几乎没有一个支持分布式的查询处理。
在ClickHouse中,数据可以保存在不用的shard上,每一个shard都由一组用于容错的replica组成,查询可以并行地在所有shard上进行处理。这些对用户来说是透明的。
1.2.5 支持SQL
ClickHouse支持基于SQL的声名式查询语言,该语言大部分情况下是与SQL标准兼容的。支持的查询包括GROUP BY,ORDER BY,IN,JOIN以及非相关子查询,不支持窗口函数和相关子查询。
1.2.6 向量引擎
为了高效的使用CPU,数据不仅仅按列存储,同时还按向量(列的一部分)进行处理,这样可以更加高效地使用CPU。
1.2.7 实时的数据更新
ClickHouse支持在表中定义主键。为了使查询能够快速在主键中进行范围查找,数据总是以增量的方式有序的存储在MergeTree中。因此,数据可以支持不断高效的写入到表中,并且写入的过程中不会存在任何加锁的行为。
1.2.8 索引
按照主键对数据进行排序,这将帮助ClickHouse在几十毫秒以内完成对数据特定值或范围的查找。
1.2.9 适合在线查询
在线查询意味着在没有对数据做任何预处理的情况下以极低的延迟处理查询并将结果加载到用户的页面中。