ClickHouse概述
文章目录
- ClickHouse概述
- ClickHouse是什么
- ClickHouse快的理由
- 什么是OLAP
- ClickHouse的特点
- 列式存储
- DBMS 的功能
- 多样化引擎
- 高吞吐写入能力
- 数据分区与线程级并行
- ClickHouse的应用
- 合适场景
- 不适合场景
ClickHouse是什么
ClickHouse 是俄罗斯的 Yandex 于 2016 年开源的列式存储数据库
(DBMS),使用 C++
语言编写,主要用于在线分析处理查询(OLAP
),能够使用 SQL 查询实时生成分析数据报告。
ClickHouse的全称是Click Stream,Data WareHouse,简称ClickHouse
-
ClickHouse是一个
完全的列式数据库管理系统
,允许在运行时创建表和数据库,加载数据和运行查询,而无需重新配置和重新启动服务器
,支持线性扩展
,简单方便
,高可靠性,容错
。 -
ClickHouse在大数据领域没有走 Hadoop 生态,而是采用 Local attached storage 作为存储,这样整个 IO 可能就没有 Hadoop 那一套的局限。
-
ClickHouse的系统在生产环境中可以应用到比较大的规模,因为它的线性扩展能力和可靠性保障能够原生支持
shard + replication
这种解决方案。它还提供了一些 SQL 直接接口,有比较丰富的原生 client。 -
还有就是ClickHouse比较快。
一些发展历程的了解:
同时,ClickHouse的社区是开源的,增长速度很快,社区也很活跃。
ClickHouse快的理由
上面收到了一点就是ClickHouse比较快,下方是官方的压测
下面是100M数据集的跑分结果:ClickHouse比Vertia快约5倍,比Hive快279倍,比My SQL 快801倍;虽然对不同的SQL查询,结果不完全一样,但是基本趋势是一致的。ClickHouse跑分有多块?举个例子:ClickHouse 1秒,Vertica 5.42秒,Hive 279秒;
下面的一些图表(来源某数据库对比网站),也可以证明ClickHouse在性能上的强大优势
- 单表查询
- 关联查询
该网站的对比结论:ClickHouse 和很多 OLAP 数据库一样,单表查询速度优于关联查询,而且 ClickHouse的两者差距更为明显。
什么是OLAP
- 百度百科
联机分析处理OLAP是一种软件技术,它使分析人员能够迅速、一致、交互地从各个方面观察信息,以达到深入理解数据的目的。它具有FASMI(Fast Analysis of Shared Multidimensional Information),即共享多维信息的快速分析的特征。其中F是快速性(Fast),指系统能在数秒内对用户的多数分析要求做出反应;A是可分析性(Analysis),指用户无需编程就可以定义新的专门计算,将其作为分析的一部 分,并以用户所希望的方式给出报告;M是多维性(Multi—dimensional),指提供对数据分析的多维视图和分析;I是信息性(Information),指能及时获得信息,并且管理大容量信息
ClickHouse的特点
列式存储
采用列式储存的好处:
-
对于列的聚合,计数,求和等统计操作原因优于行式存储。
-
由于某一列的数据类型都是相同的,针对于数据存储更容易进行数据压缩,每一列选择更优的数据压缩算法,大大提高了数据的压缩比重。
-
由于数据压缩比更好,一方面节省了磁盘空间,另一方面对于 cache 也有了更大的发挥空间
DBMS 的功能
几乎覆盖了标准SQL 的大部分语法,包括 DDL 和 DML,以及配套的各种函数,用户管理及权限管理,数据的备份与恢复。
多样化引擎
ClickHouse 和 MySQL 类似,把表级的存储引擎插件化,根据表的不同需求可以设定不同的存储引擎。目前包括合并树、日志、接口和其他四大类 20 多种引擎。
高吞吐写入能力
-
ClickHouse 采用
类LSM Tree
的结构,数据写入后定期在后台Compaction。 -
通过类LSM tree 的结构,ClickHouse 在数据导入时全部是
顺序 append
写,写入后数据段不可更改
,在后台compaction 时也是多个段merge sort 后顺序写回磁盘。 -
顺序写的特性,充分利用了磁盘的吞吐能力,即便在 HDD 上也有着优异的写入性能。
官方公开 benchmark 测试显示能够达到 50MB-200MB/s 的写入吞吐能力,按照每行100Byte 估算,大约相当于 50W-200W 条/s 的写入速度。
数据分区与线程级并行
ClickHouse 将数据划分为多个 partition,每个 partition 再进一步划分为多个 index granularity(索引粒度),然后通过多个CPU 核心分别处理其中的一部分来实现并行数据处理。在这种设计下,单条 Query 就能利用整机所有CPU。极致的并行处理能力,极大的降低了查询延时。
所以,ClickHouse 即使对于大量数据的查询也能够化整为零平行处理。但是有一个弊端就是对于单条查询使用多 cpu,就不利于同时并发多条查询。所以对于高 qps 的查询业务, ClickHouse 并不是强项。
ClickHouse的应用
合适场景
ClickHouse属于OLAP,同时兼具SQL大部分语法,速度快,所以ClickHouse非常适用于BI领域,除此之外,还可以广泛应用于广告流量、Web、App流量、电信、金融、电子商务、信息安全、网络游戏、物联网等众多其他领域
不适合场景
ClickHouse作为一款高性能OLAP数据库,虽然足够优秀,但也不是万能的。我们不应该把它用于任何OLTP事务性操作的场景,因为它有以下几点不足。
-
不支持事务。
-
不擅长根据主键按行粒度进行查询(虽然支持),故不应该把ClickHouse当作Key-Value数据库使用。
-
不擅长按行删除数据(虽然支持)。
这些不足之处并不能视为ClickHouse的缺点,事实上其他同类高性能的OLAP数据库同样也不擅长上述的这些方面。因为对于一款OLAP数据库而言,上述这些能力并不是重点,只能说这是为了极致查询性能所做的权衡。
全文结束!