1、ClickHouse表引擎
表引擎分为四种:
1. MergeTree
2. Log
3. Integrations
4. Special
1.MergeTree
MergeTree系列引擎适用于高负载任务,支持大数据量的快速写入并进行后续的数据处理,通用程度高且功能强大。
该系列引擎的共同特点是支持数据副本、分区、数据采样等特性。
表引擎 | 特点 |
---|---|
MergeTree | 用于插入极大量的数据到一张表中,数据以数据片段的形式一个接着一个的快速写入,数据片段按照一定的规则进行合并。 |
ReplacingMergeTree | 用于解决MergeTree表引擎相同主键无法去重的问题,可以删除主键值相同的重复项。 |
CollapsingMergeTree | 在建表语句中新增标记列Sign ,用于消除ReplacingMergeTree表引擎的如下功能限制。在分布式场景下,相同主键的数据可能被分布到不同节点上,不同分片间可能无法去重。 在没有彻底optimize之前,可能无法达到主键去重的效果,比如部分数据已经被去重,而另外一部分数据仍旧有主键重复。 optimize是后台动作,无法预测具体执行时间点。 手动执行optimize在海量数据场景下需要消耗大量时间,无法满足业务即时查询的需求。 |
VersionedCollapsingMergeTree | 在建表语句中新增Version 列,用于解决CollapsingMergeTree表引擎乱序写入导致无法正常折叠(删除)的问题。 |
SummingMergeTree | 用于对主键列进行预先聚合,将所有相同主键的行合并为一行,从而大幅度降低存储空间占用,提升聚合计算性能。 |
AggregatingMergeTree | 预先聚合引擎的一种,用于提升聚合计算的性能,可以指定各种聚合函数。 |
GraphiteMergeTree | 用于存储Graphite数据并进行汇总,可以减少存储空间,提高Graphite数据的查询效率。 |
2.Log
Log系列引擎适用于快速写入小表(1百万行左右的表)并读取全部数据的场景。
该系列引擎的共同特点如下。
- 数据被追加写入磁盘中。
- 不支持
delete
、update
。 - 不支持索引。
- 不支持原子性写。
insert
会阻塞select
操作。
表引擎 | 特点 |
---|---|
TinyLog | 不支持并发读取数据文件,格式简单,查询性能较差,适用于暂存中间数据。 |
StripeLog | 支持并发读取数据文件,将所有列存储在同一个大文件中,减少了文件数,查询性能比TinyLog好 |
Log | 支持并发读取数据文件,每个列会单独存储在一个独立文件中,查询性能比TinyLog好。 |
3.Integrations
Integrations系列引擎适用于将外部数据导入到云数据库ClickHouse中,或者在云数据库ClickHouse中直接使用外部数据源.
表引擎 | 特点 |
---|---|
Kafka | 将Kafka Topic中的数据直接导入到云数据库ClickHouse。 |
MySQL | 将MySQL作为存储引擎,直接在云数据库ClickHouse中对MySQL表进行select 等操作。 |
JDBC | 通过指定JDBC连接串读取数据源。 |
ODBC | 通过指定ODBC连接串读取数据源。 |
HDFS | 直接读取HDFS上特定格式的数据文件。 |
4.Special
Special系列引擎适用于特定的功能场景。
表引擎 | 特点 |
---|---|
Distributed | 本身不存储数据,可以在多个服务器上进行分布式查询。 |
MaterializedView | 用于创建物化视图。 |
Dictionary | 将字典数据展示为一个云数据库ClickHouse表。 |
Merge | 本身不存储数据,可以同时从任意多个其他表中读取数据。 |
File | 直接将本地文件作为数据存储。 |
NULL | 写入数据被丢弃,读取数据为空。 |
Set | 数据总是保存在RAM中。 |
Join | 数据总是保存在内存中。 |
URL | 用于管理远程HTTP、HTTPS服务器上的数据。 |
View | 本身不存储数据,仅存储指定的SELECT 查询。 |
Memory | 数据存储在内存中,重启后会导致数据丢失。查询性能极好,适合于对于数据持久性没有要求的1亿以下的小表。在云数据库ClickHouse中,通常用来做临时表。 |
Buffer | 为目标表设置一个内存Buffer,当Buffer达到了一定条件之后会写入到磁盘。 |