ClickHouse教程 — 第二章 ClickHouse快速入门
- 1 ClickHouse简介
- 2 ClickHouse特点
- 3 clickhouse缺点
- 4 clickhouse为什么快
- 5 ClickHouse引擎
- 5.1 数据库引擎
- 5.2 数据表引擎
- 5.2.1 表引擎类型
- 5.3 数据类型
- 6 ClickHouse使用语法
- 7 代码操作ClickHouse
1 ClickHouse简介
参考1:ClickHouse官方介绍
参考2:ClickHouse介绍
参考3:篇一|ClickHouse快速入门
推荐阅读参考1
。
ClickHouse
是俄罗斯
的 Yandex
于 2016 年开源的用于在线分析处理查询(OLAP :Online Analytical Processing
)MPP架构的列式存储数据库(DBMS:Database Management System)
,能够使用 SQL 查询实时生成分析数据报告,主要用于Web
流量分析。ClickHouse的全称是Click Stream,Data WareHouse
。
ClickHouse
非常适用于商业智能领域,除此之外,它也能够被广泛应用于广告流量、Web
、App
流量、电信、金融、电子商务、信息安全、网络游戏、物联网等众多其他领域。
2 ClickHouse特点
① 列式存储
行式存储的好处:
想查找某个人所有的属性时,可以通过一次磁盘查找加顺序读取就可以;但是当想查所有人的年龄时,需要不停的查找,或者全表扫描才行,遍历的很多数据都是不需要的。
列式存储的好处:
- 对于列的聚合、计数、求和等统计操作优于行式存储。
- 由于某一列的数据类型都是相同的,针对于数据存储更容易进行数据压缩,每一列选择更优的数据压缩算法,大大提高了数据的压缩比重。
- 数据压缩比更好,一方面节省了磁盘空间,另一方面对于cache也有了更大的发挥空间。
列式存储不支持事务
。
② DBMS功能
几乎覆盖了标准 SQL 的大部分语法,包括 DDL 和 DML、,以及配套的各种函数;用户管理及权限管理、数据的备份与恢复。
③ 多样化引擎
目前包括合并树、日志、接口和其他四大类20多种引擎。
④ 高吞吐写入能力
ClickHouse
采用类LSM Tree
的结构,数据写入后定期在后台Compaction。通过类 LSM tree
的结构, ClickHouse
在数据导入时全部是顺序append
写,写入后数据段不可更改,在后台compaction
时也是多个段merge sort
后顺序写回磁盘。顺序写的特性,充分利用了磁盘的吞吐能力。
⑤ 数据分区与线程及并行
ClickHouse
将数据划分为多个partition
,每个partition
再进一步划分为多个index granularity
(索引粒度),然后通过多个CPU
核心分别处理其中的一部分来实现并行数据处理。在这种设计下, 单条 Query
就能利用整机所有 CPU
。 极致的并行处理能力,极大的降低了查询延时。
所以, ClickHouse
即使对于大量数据的查询也能够化整为零平行处理。但是有一个弊端就是对于单条查询使用多cpu,就不利于同时并发多条查询。所以对于高 qps 的查询业务并不是强项。
⑥ ClickHouse
像很多 OLAP
数据库一样,单表查询速度优于关联查询,而且 ClickHouse
的两者差距更为明显。
关联查询:clickhouse
会将右表加载到内存。
3 clickhouse缺点
- 列式存储不支持事务。
- 不擅长根据主键按行粒度进行查询(虽然支持),故不应该把ClickHouse当作Key-Value数据库使用。
- 不擅长按行删除数据(虽然支持)。
4 clickhouse为什么快
- C++可以利用硬件优势。
- 摒弃了hadoop生态。
- 数据底层以列式存储。
- 利用单节点的多核并行处理。
- 为数据建立索引一级、二级、稀疏索引。
- 使用大量的算法处理数据。
- 支持向量化处理。
- 预先设计运算模型-预先计算。
- 分布式处理数据。
5 ClickHouse引擎
ClickHouse
引擎分为 数据库引擎 和 数据表引擎 。
5.1 数据库引擎
数据库引擎,默认情况下,ClickHouse
使用Atomic
数据库引擎。它提供了可配置的table engines
和SQL dialect
。
-
MySQL
MySQL
引擎用于将远程的MySQL
服务器中的表映射到ClickHouse
中,并允许您对表进行INSERT
和SELECT
查询,以方便您在ClickHouse
与MySQL
之间进行数据交换。MySQL
数据库引擎会将对其的查询转换为MySQL
语法并发送到MySQL
服务器中,因此您可以执行诸如SHOW TABLES
或SHOW CREATE TABLE
之类的操作。 -
MaterializeMySQL
MySQL数据同步;将MySQL数据全量或增量方式同步到clickhouse中,解决mysql服务并发访问压力过大的问题。 -
Lazy
在最后一次访问之后,只在RAM
中保存expiration_time_in_seconds
秒。只能用于Log
表。
它是为存储许多小的Log
表而优化的,对于这些表,访问之间有很长的时间间隔。也就是访问不频繁,压缩率高。 -
Atomic
默认的数据库引擎。它提供了可配置的table engines
和SQL dialect
。 -
PostgreSQL
-
MaterializedPostgreSQL
-
Replicated
-
SQLite
5.2 数据表引擎
表引擎是 ClickHouse
的一大特色。可以说, 表引擎决定了如何存储表的数据。包括:
- 数据的存储方式和位置,写到哪里以及从哪里读取数据。
- 支持哪些查询以及如何支持。
- 并发数据访问。
- 索引的使用(如果存在)。
- 是否可以执行多线性请求。
- 数据复制参数。
5.2.1 表引擎类型
参考1:表引擎
表引擎大致可分四个种类。
-
合并树家族
适用于高负载任务的最通用和功能最强大的表引擎。这些引擎的共同特点是可以快速插入数据并进行后续的后台数据处理。MergeTree
系列引擎支持数据复制(使用Replicated* 的引擎版本),分区和一些其他引擎不支持的其他功能。该类型的引擎:
MergeTree
最常用ReplacingMergeTree
最常用SummingMergeTree
AggregatingMergeTree
CollapsingMergeTree
VersionedCollapsingMergeTree
GraphiteMergeTree
-
日志引擎系列
具有最小功能的轻量级引擎。当您需要快速写入许多小表(最多约100万行)并在以后整体读取它们时,该类型的引擎是最有效的。该类型的引擎:
TinyLog
StripeLog
Log
-
集成的表引擎
用于与其他的数据存储与处理系统集成的引擎。该类型的引擎:
Kafka
比较常用,采集回来的数据先存Kafka
然后同步到clickhouse
MySQL
比较常用。ODBC
JDBC
HDFS
-
特别
该类型的引擎:
Distributed
MaterializedView
Dictionary
Merge
File
Null
Set
Join
URL
View
Memory
Buffer
5.3 数据类型
6 ClickHouse使用语法
ClickHouse
的语法与MySQL
语法比较接近。在此就不做过多介绍了,可参考:SQL参考