Clickhouse-表引擎探索之MergeTree

在这里插入图片描述

引言

前文曾说过,Clickhouse是一个强大的数据库Clickhouse-一个潜力无限的大数据分析数据库系统
其中一个强大的点就在于支持各类表引擎以用于不同的业务场景。

MergeTree

MergeTree系列的引擎被设计用于插入极大量的数据到一张表当中。数据可以以数据片段的形式一个接着一个的快速写入,数据片段在后台按照一定的规则进行合并。相比在插入时不断修改(重写)已存储的数据,这种策略会高效很多。

其主要特点:

  • 存储的数据按主键排序。
  • 这使得您能够创建一个小型的稀疏索引来加快数据检索。
  • 如果指定了分区键的话,可以使用分区。
  • 在相同数据集和相同结果集的情况下 ClickHouse 中某些带分区的操作会比普通操作更快。查询中指定了分区键时 ClickHouse 会自动截取分区数据。这也有效增加了查询性能。
  • 支持数据副本。
  • 支持数据采样。

MergeTree表引擎的基础建表语句如下

CREATE TABLE table_name
(
    `column_1` String,
    `column_2` Int32,
    `column_3` String
)
ENGINE = MergeTree
PARTITION BY column
ORDER BY column

  • ORDER BY:排序键,可以是单列或多列。通常没有显示指定主键的情况下,我们会指定一个排序键,Clickhouse也会自动使用排序键作为主键
  • PARTITION BY:分区键。通常使用Clickhouse都会存储“大数据”,既然是大数据,用分区来隔离数据会大大提升后续查询效率。多半用月分区的情况下, 可使用表达式toYYYYMM(date_column)来实现。

还有更多参数可选配,请参考
Clickhouse-MergeTree

ReplacingMergeTree

ReplacingMergeTree与MergeTree的不同在于它会删除排序键值相同的重复数据。
数据的去重只会在数据合并期间进行。但是合并会在后台一个不确定的时间进行,所以数据并不是有规律的进行删除\合并。
当然Clickhouse支持使用OPTIMIZE进行手动合并数据,不过会引起对数据的大量读写(建议在业务低峰期执行)。

ReplacingMergeTree的建表语句通常为

CREATE TABLE table_name
(
    `column_time` DateTime,
    `column_order` Int32,
    `vd` String
)
ENGINE = ReplacingMergeTree(column_time)
PARTITION BY vd
ORDER BY column_order

数据合并(去重)策略为,当order by 字段重复时,保留ReplacingMergeTree字段最大的一条

测试看下效果

1、建表

CREATE TABLE t1
(
    `column_time` DateTime,
    `column_order` Int32,
    `vd` String
)
ENGINE = ReplacingMergeTree(column_time)
PARTITION BY vd
ORDER BY column_order

2、插入数据

INSERT INTO TABLE t1 VALUES ('2024-03-28 10:00:01', 1,'20240338') ;
INSERT INTO TABLE t1 VALUES ('2024-03-28 10:00:02', 1,'20240338') ;
INSERT INTO TABLE t1 VALUES ('2024-03-28 10:00:03', 1,'20240338') ;
INSERT INTO TABLE t1 VALUES ('2024-03-28 10:00:04', 1,'20240338') ;
INSERT INTO TABLE t1 VALUES ('2024-03-28 10:00:05', 1,'20240338') ;

3、验证
可以看到表中最终只有(‘2024-03-28 10:00:05’, 1,‘20240338’)这条数据
在这里插入图片描述

彩蛋

在文章开头,MergeTree之所谓被称为系列,是因为在Clickhouse由MergeTree衍生出了很多相关类型的引擎

  • MergeTree
  • ReplacingMergeTree
  • SummingMergeTree
  • AggregatingMergeTree
  • CollapsingMergeTree
  • VersionedCollapsingMergeTree
  • GraphiteMergeTree

其他引擎后续有机会在生产验证后再与大家分享。

在这里插入图片描述

相关推荐

  1. Clickhouse MergeTree原理(二)—— 和分区的维护

    2024-03-30 16:16:03       35 阅读
  2. ClickHouse引擎概述

    2024-03-30 16:16:03       27 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-30 16:16:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-30 16:16:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-30 16:16:03       82 阅读
  4. Python语言-面向对象

    2024-03-30 16:16:03       91 阅读

热门阅读

  1. Qt_Note18_QML_c++与qml信号与槽

    2024-03-30 16:16:03       43 阅读
  2. taskkill /f /fi “windowtitle eq 窗口标题“ /t 踩坑

    2024-03-30 16:16:03       39 阅读
  3. 云备份客户端业务实现逻辑

    2024-03-30 16:16:03       37 阅读
  4. JVM之堆

    JVM之堆

    2024-03-30 16:16:03      29 阅读
  5. 面向对象设计之单一职责原则

    2024-03-30 16:16:03       46 阅读
  6. kubuntu23.10安装sdl2及附加库和 sfml2.5.1

    2024-03-30 16:16:03       46 阅读
  7. 动态堆栈类及括号匹配(考察类的构建与应用)

    2024-03-30 16:16:03       41 阅读