ClickHouse 是俄罗斯最大的搜索引擎 Yandex 在 2016 年开源的数据库管理系统(DBMS),主要用于联机分析处理(OLAP)。其采用了面向列的存储方式,性能远超传统面向行的 DBMS,近几年受到广泛关注。
本文将介绍 ClickHouse MergeTree 系列表引擎 的相关知识,并通过示例分析 MergeTree 存储引擎的数据存储结构。
1 MergeTree 表引擎简介
MergeTree(合并树)系列表引擎是 ClickHouse 提供的最具特色的存储引擎。MergeTree 引擎支持数据按主键、数据分区、数据副本以及数据采样等特性。官方提供了包括 MergeTree、ReplacingMergeTree、SummingMergeTree、AggregatingMergeTree、CollapsingMergeTree、VersionedCollapsingMergeTree、GraphiteMergeTree 等 7 种不同类型的 MergeTree 引擎的实现,以及与其相对应的支持数据副本的 MergeTree 引擎(Replicated*)。
首先来介绍一下 MergeTree 核心引擎:
ReplacingMergeTree: 在后台数据合并期间,对具有相同排序键的数据进行去重操作。
SummingMergeTree: 当合并数据时,会把具有相同主键的记录合并为一条记录。根据聚合字段设置,该字段的值为聚合后的汇总值,非聚合字段使用第一条记录的值,聚合字段类型必须为数值类型。
AggregatingMergeTree: 在同一数据分区下,可以将具有相同主键的数据进行聚合。
CollapsingMergeTree: 在同一数据分区下,对具有相同主键的数据进行折叠合并。
VersionedCollapsingMergeTree:
基于 CollapsingMergeTree 引擎,增添了数据版本信息字段配置选项。在数据依据 ORDER BY 设置对数据进行排序的基础上,如果数据的版本信息列不在排序字段中,那么版本信息会被隐式的作为 ORDER BY 的最后一列从而影响数据排序。
GraphiteMergeTree: 用来存储时序数据库 Graphites 的数据。
MergeTree 是该系列引擎中最核心的引擎,其他引擎均以 MergeTree 为基础,并在数据合并过程中实现了不同的特性,从而构成了 MergeTree 表引擎家族。下面我们通过 MergeTree 来具体了解 MergeTree 表系列引擎。
2 MergeTree 引擎
2.1 表创建
创建 MergeTree 的 DDL 如下所示:
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [TTL expr1],
name2