博客
关于我
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/

    你可能感兴趣的文章
    pfsense关闭nat
    查看>>
    PFX(Parallel Framework) and Traditional Multithreading
    查看>>
    PGOS:今天动手给电脑装青苹果Win7 X64位系统
    查看>>
    pgpool-II3.1 的内存泄漏(一)
    查看>>
    PgSQL · 特性分析 · PG主备流复制机制
    查看>>
    PGSQL主键序列
    查看>>
    PGSQL安装PostGIS扩展模块
    查看>>
    pg数据库中两个字段相除
    查看>>
    PhalApi:[1.23] 请求和响应:GET和POST两者皆可得及超越JSON格式返回
    查看>>
    Phalcon环境搭建与项目开发
    查看>>
    Phantom.js维护者退出,项目的未来成疑
    查看>>
    Pharmaceutical的同学们都看过来,关于补码运算的复习相关内容
    查看>>
    Phoenix 查看表信息及修改元数据
    查看>>
    phoenix_执行sql报错_Error: ERROR 504 (42703): Undefined column. columnName=(state=4270_大数据工作笔记0181
    查看>>
    phoenix启动失败_The history file `/root/.sqlline/history` may be an older history---记录024_大数据工作笔记0184
    查看>>
    Phoenix基础命令_视图映射和表映射_数字存储问题---大数据之Hbase工作笔记0036
    查看>>
    phoenix无法连接hbase shell创建表失败_报错_PleaseHoldException: Master is initializing---记录020_大数据工作笔记0180
    查看>>
    Phoenix简介_安装部署_以及连接使用---大数据之Hbase工作笔记0035
    查看>>
    phoenix连接hbase报错Can not resolve hadoop120, please check your network_记录026---大数据工作笔记0187
    查看>>
    Photoshop工作笔记001---Photoshop常用快捷键总结
    查看>>