博客
关于我
clickhouse CollapsingMergeTree表引擎
阅读量:653 次
发布时间:2019-03-15

本文共 2592 字,大约阅读时间需要 8 分钟。

CollapsingMergeTree和VersionedCollapsingMergeTree引擎概述

CollapsingMergeTree是一种基于增删思想的表引擎,它支持行级数据的修改和删除操作。其核心原理是通过定义一个sign标记位字段来控制数据的存活状态。具体来说,当sign标记为1时,表示该行数据为有效数据;当sign标记为-1时,表示该行数据需要被删除。

创表语法

CollapsingMergeTree引擎的建表语法如下:

CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] (    name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],    name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],    ...) ENGINE = CollapsingMergeTree(sign) [PARTITION BY expr][ORDER BY expr][SAMPLE BY expr][SETTINGS name=value, ...]

引擎特点

  • Incremental Delete:引擎通过sign字段的作用机制,支持数据的增删操作。当需要删除一条记录时,只需在同一记录基础上修改sign字段为-1即可。此外,新增有效数据时,应插入一条sign字段为1的记录。

  • 分区合并机制:当发生分区合并时,引擎会根据分区内的sign标记进行合并操作。同一分区内,sign标记为1和-1的数据会被抵消删除。这一机制需要在后台进行Compaction操作,或者在特定情况下由用户手动触发优化操作。

  • 适用场景:该引擎特别适用于对数据写入顺序有一定要求的场景。它依赖于写入数据的顺序来完成折叠操作。如果需要处理大量数据或有多线程写入的情况,建议使用VersionedCollapsingMergeTree引擎。

  • VersionedCollapsingMergeTree引擎

    为了应对数据写入乱序的情况,VersionedCollapsingMergeTree引擎提供了一个额外的version字段。它与CollapsingMergeTree引擎的主要区别在于,Versioned引擎不再对写入数据的顺序产生依赖。

    建表语法

    VersionedCollapsingMergeTree引擎的建表语法如下:

    CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] (    name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],    name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],    ...    version UInt8) ENGINE = VersionedCollapsingMergeTree(sign, version) [PARTITION BY expr][ORDER BY expr][SAMPLE BY expr][SETTINGS name=value, ...]

    参数解释

    • sign:与CollapsingMergeTree引擎相同,用于标记数据的存活状态。
    • version: UInt8类型的字段,用于跟踪数据的版本信息。Versioned引擎会根据version字段进行排序,从而确保数据的折叠操作能够正确执行。

    使用实例

    以下是一个使用VersionedCollapsingMergeTree引擎的示例:

  • 首先插入需要删除的数据:
  • INSERT INTO emp_versioned VALUES (1, 'tom', '上海', 25, '技术部', 20000, -1, 1);
    1. 再插入正常数据:
    2. INSERT INTO emp_versioned VALUES (1, 'tom', '上海', 25, '技术部', 20000, 1, 1);
      1. 插入新版本数据:
      2. INSERT INTO emp_versioned VALUES (1, 'tom', '上海', 25, '技术部', 30000, 1, 2);

        在插入新数据后,执行优化操作并查询表:

        OPTIMIZE TABLE emp_versioned;

        查询结果

        执行优化操作后,sign为1和-1的数据会被自动折叠,结果如下:

        SELECT * FROM emp_versioned;┌─emp_id─┬─name─┬─work_place─┬─age─┬─depart─┬───salary─┬─sign─┬─version─┐│      1 │ tom  │ 上海       │  25 │ 技术部 │ 30000.00 │    1 │       2 │└────────┴──────┴────────────┘

        注意事项

      3. 分区合并:分区合并操作通常需要后台Compaction来优化数据体积。手动执行合并操作可能会显著影响性能,因此在生产环境中不建议手动操作。

      4. 数据折叠:Versioned引擎通过version字段实现了对数据写入顺序的无依赖性。它会自动将version字段纳入排序逻辑,确保数据的准确折叠。

      5. 查询优化:在进行数据汇总操作时,建议通过合理的查询策略过滤出sign为1的数据。如下所示:

      6. SELECT emp_id, name, sum(salary * sign) FROM emp_versionedGROUP BY emp_id, nameHAVING sum(sign) > 0;

        总结

        CollapsingMergeTree和VersionedCollapsingMergeTree引擎为 coprocessor 型键存储引擎提供了强大的数据管理能力。CollapsingMergeTree引擎依赖于数据的写入顺序,而VersionedCollapsingMergeTree引擎则通过引入version字段实现了对写入顺序的无关性。无论是哪种引擎,都通过智能的折叠机制确保数据的高效管理和查询。

    转载地址:http://wrsmz.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现获取磁盘剩余空间(附完整源码)
    查看>>
    Objective-C实现获取磁盘盘符以及剩余空间(附完整源码)
    查看>>
    Objective-C实现获得总和S所需的最小硬币数量的函数(附完整源码)
    查看>>
    Objective-C实现获得第 N 个卢卡斯数算法 (附完整源码)
    查看>>
    Objective-C实现萨内瓦片调度算法(附完整源码)
    查看>>
    Objective-C实现蓄水池算法(附完整源码)
    查看>>
    Objective-C实现蓄水池算法(附完整源码)
    查看>>
    Objective-C实现蓄水池算法(附完整源码)
    查看>>
    Objective-C实现装饰模式(附完整源码)
    查看>>
    Objective-C实现观察者模式(附完整源码)
    查看>>
    Objective-C实现观访问者模式(附完整源码)
    查看>>
    Objective-C实现视频流转换为图片(附完整源码)
    查看>>
    Objective-C实现视频除雾算法(附完整源码)
    查看>>
    Objective-C实现角谷猜想(附完整源码)
    查看>>
    Objective-C实现解密 Atbash 密码算法(附完整源码)
    查看>>
    Objective-C实现解密藏头诗(附完整源码)
    查看>>
    Objective-C实现解析数学表达式解析(附完整源码)
    查看>>
    Objective-C实现解释器模式(附完整源码)
    查看>>
    Objective-C实现计时(附完整源码)
    查看>>
    Objective-C实现计算 32 位整数中设置的位数算法(附完整源码)
    查看>>