ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS),简称CK,使用C 语言编写,主要用于在线分析处理查询(OLAP),能够使用SQL查询实时生成分析数据报告。
ClickHouse是一个完全的列式数据库管理系统,允许在运行时创建表和数据库,加载数据和运行查询,而无需重新配置和重新启动服务器,支持线性扩展,简单方便,高可靠性,容错。
ClickHouse在大数据领域没有走Hadoop生态,而是采用Local attached storage作为存储,这样整个IO可能就没有Hadoop那一套的局限。它的系统在生产环境中可以应用到比较大的规模,因为它的线性扩展能力和可靠性保障能够原生支持shard replication这种解决方案。它还提供了一些SQL直接接口,有比较丰富的原生client。
Clickhouse的存储引擎
ClickHouse提供了多种存储引擎,每种引擎都有其特定的使用场景和优势。以下是一些ClickHouse中常用的存储引擎:
- MergeTree:这是ClickHouse中最基本的存储引擎,它为高性能查询和数据插入提供了基础支持。
- ReplicatedMergeTree:这是MergeTree的扩展,支持数据复制,常用于构建高可用性集群。
- SummingMergeTree:这种引擎主要用于只关心聚合后的数据,而不关心明细数据的场景。它能够在合并分区的时候按照预先定义的条件聚合汇总数据。
- Log:这是一个轻量级、最小功能的引擎家族。
此外,还有ReplacingMergeTree
、AggregatingMergeTree
等其他存储引擎。每种引擎都有其特定的使用场景和优势,可以根据实际需求进行选择。
常用的存储引擎:MergeTree、ReplicatedMergeTree、SummingMergeTree、AggregatingMergeTree
ReplacingMergeTree:
- 作用:在MergeTree的基础上加入了去重的功能。它仅会在合并分区时,删除重复的数据,写入相同数据时并不会引发异常。
- 使用场景:当表中没有主键重复的数据时,可以使用该引擎。
SummingMergeTree:
- 作用:主要用于只关心聚合后的数据,而不关心明细数据的场景。它能够在合并分区的时候按照预先定义的条件聚合汇总数据,将同一分组下的多行数据汇总到一行,这样即减少了数据行,又降低了后续汇总查询的开销。
- 优势:减少额外的存储开销和减少额外的查询开销。
AggregatingMergeTree:
- 作用:在同一数据分区下,可以将具有相同主键的数据进行聚合。
MergeTree:
- 作用:ClickHouse中最基本的存储引擎。它为高性能查询和数据插入提供了基础支持。工作原理是:将数据按照主键排序存储,以便在查询时快速定位和读取数据。当插入新数据时,MergeTree会将数据追加到一个临时的未排序区域。然后,后台的合并进程会定期将这些未排序的数据块与已排序的数据块合并,以保持数据的有序性。
- 使用场景:需要高性能查询和数据插入的应用、数据按照主键排序存储、数据更新和删除操作较少。
- 优缺点:优点包括高性能查询(由于数据按照主键排序存储,可以快速定位和读取数据)、高性能插入(支持高速数据插入,因为新数据会先追加到未排序区域,然后在后台进行合并);缺点是不支持实时更新和删除、不支持分布式和高可用性。
存储引擎的使用
在ClickHouse中使用MergeTree引擎建表语句的语法如下:
代码语言:sql复制CREATE TABLE table_name (
column1 DataType,
column2 DataType,
...
) ENGINE = MergeTree()
ORDER BY column1;
其中,table_name
是表的名称,column1
、column2
等是表的列名,DataType
是列的数据类型。
在MergeTree引擎中,ORDER BY
子句用于指定表的排序键。排序键是用于在MergeTree引擎中组织数据的关键字,它决定了数据在磁盘上的存储顺序。通过指定排序键,可以优化查询性能和数据插入的顺序。
我正在参与2023腾讯技术创作特训营第四期有奖征文,快来和我瓜分大奖!