美文网首页
clickhouse-MergeTree引擎

clickhouse-MergeTree引擎

作者: 越狱的灵感 | 来源:发表于2022-06-09 10:15 被阅读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

    相关文章

      网友评论

          本文标题:clickhouse-MergeTree引擎

          本文链接:https://www.haomeiwen.com/subject/trujmrtx.html