clickhouse-MergeTree引擎

2022-06-09  本文已影响0人  越狱的灵感

参考文档

https://clickhouse.tech/docs/en/engines/table-engines/#mergetree
https://clickhouse.tech/docs/en/engines/table-engines/mergetree-family/replication/#table_engines-replication

前言

业务使用主要使用MergeTree,结合ZK高可用 使用Replicated*MergeTree系列。

MergeTree 系列

1.png

按功能划分为6类,均继承MergeTree。
业务上主要使用MergeTree,ReplacingMergeTree,SummingMergeTree,AggregatingMergeTree

engine function remark
ReplacingMergeTree 去重 相同分区数据去重,分区合并的时候触发,以Order by排序键为基准
SummingMergeTree 预聚合 相同分区的数据预聚合,分区合并的时候触发,以Order by排序键为基准
AggregatingMergeTree 预聚合 相同分区的数据预聚合,主要结合物化视图使用,需要注意!数据写入使用State函数,数据读取使用Merge函数
CollapsingMergeTree 以增代删 以增代删,分区合并时候触发,以Order by排序键为基准
VersionedCollapsingMergeTree 以增代删 功能通CollapsingMergeTree,以增代删,但CollapsingMergeTree需要写入按严格的顺序,而VersionedCollapsingMergeTree不用,会在order by后自动添加version字段,保证有序
GraphiteMergeTree 监控 Graphite监控引擎,没用过

Replicated*MergeTree系列

数据多副本高可用主要是ReplicatedMergeTree引擎系列,结合以上的6类引擎实现不同的业务需求。数据多副本一致性,高可用主要依赖zk*

2.png
Replicated*MergeTree是在MergeTree上加了分布式功能。主要分为以下引擎,功能同MergeTree,也是我们
业务主要使用的引擎。

ReplicatedMergeTree
ReplicatedSummingMergeTree
ReplicatedReplacingMergeTree
ReplicatedAggregatingMergeTree
ReplicatedCollapsingMergeTree
ReplicatedVersionedCollapsingMergeTree
ReplicatedGraphiteMergeTree

MergeTree建表模板

CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
    name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [TTL expr1],
    name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2] [TTL expr2],
    ...
    INDEX index_name1 expr1 TYPE type1(...) GRANULARITY value1,
    INDEX index_name2 expr2 TYPE type2(...) GRANULARITY value2
) ENGINE = MergeTree()
ORDER BY expr
[PARTITION BY expr]
[PRIMARY KEY expr]
[SAMPLE BY expr]
[TTL expr
    [DELETE|TO DISK 'xxx'|TO VOLUME 'xxx' [, ...] ]
    [WHERE conditions]
    [GROUP BY key_expr [SET v1 = aggr_func(v1) [, v2 = aggr_func(v2) ...]] ] ]
[SETTINGS name=value, ...]

ENGINE:表引擎(必填
ORDER BY:排序键(必填),默认主键primary key与排序键相同。排序键可以单个列字段,也可以多个列字段
PARTITION BY:分区键 不声明分区键则ck会生成一个名为all的分区。合理使用分区 可以减少查询数据文件的扫描范围
primary key:主键 一级索引,用于加速表查询。默认主键与排序键相同
sample by:抽样表达式,很少用,一般用户数据抽样
TTL:表级别的数据生命周期,过期存储策略
settting部分:
index_granularity:索引粒度,默认值8192,不建议修改。
index_granularity_bytes:索引粒度,默认值10Mb,不同于index_granularity按行,也同样按文件大小建索引。
enable_mixed_granularity_parts:是否开启自适应索引间隔的功能,默认开启。
use_minimalistic_part_header_in_zookeeper:ZK元数据进行压缩存储。注意无法回滚,大表字段很多建议加上。
min_merge_bytes_to_use_direct_io:使用直接 I/O 来操作磁盘的合并操作时要求的最小数据量。
merge_with_ttl_timeout:TTL合并频率的最小间隔时间,默认一天(86400s)。
write_final_mark:默认为1,启用或禁用在数据片段尾部写入最终索引标记,不要改。
storage_policy:存储策略,这个需要注意,生产环境如果使用多磁盘存储策略,需要指定,否则会默认找confif.xml中配置的path路径。
index_granularity,use_minimalistic_part_header_in_zookeeper,storage_policy比较重要,需要注意

Tips:

1,分区键不可修改,排序键理论上也不可修改,只能将新加的字段加到排序键,所以建议一开始就要定义好排序键和分区间。如果不好操作,可以考虑物化视图解决,否则只能使用类似clickhouse-copier的同步工具做reshard

上一篇下一篇

猜你喜欢

热点阅读