Clickhouse从入门到入坑(23)

88 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 24 天,点击查看活动详情

生命不息,学习不止

题外话

周六了,今天去了哪个宠物展,逛了一天,啊,好累,人好多,好挤,可恶的小猫咪都是你害的,等我一会就给你短粮,让你跪下来求我

废话不多说,上货

在这里插入图片描述

Merge表引擎和MergeTree表引擎区别演示

上节我们讲了Merge表引擎和MergeTree表引擎区别,今天演示一下Merge表引擎和MergeTree表引擎的区别

Merge表引擎和MergeTree表引擎的存储方式和数据合并方式的区别:

Merge表引擎:
   ┌──────────────┐      ┌──────────────┐      ┌──────────────┐
   │   文件1       │      │   文件2      │      │   文件3       │
   │  分区1, 排序1  │      │  分区2, 排序1 │      │  分区3, 排序1 │
   └──────────────┘      └──────────────┘      └──────────────┘
           │                      │                      │
           ▼                      ▼                      ▼
      ┌──────────────┐      ┌──────────────┐      ┌──────────────┐
      │   查询结果     │     │   查询结果    │       │   查询结果    │
      └──────────────┘      └──────────────┘      └──────────────┘

MergeTree表引擎:
   ┌──────────────┐
   │   磁盘分区1  │
   │ ┌───────────┐│
   │ │ 数据块1   ││
   │ │ 排序1    ││
   │ └───────────┘│
   │ ┌───────────┐│
   │ │ 数据块2   ││
   │ │ 排序1    ││
   │ └───────────┘│
   │ ┌───────────┐│
   │ │ 数据块3   ││
   │ │ 排序1    ││
   │ └───────────┘│
   │      ...      │
   └──────────────┘
           │
           ▼
      ┌──────────────┐
      │   查询结果   │
      └──────────────┘

在上面的示意图中,Merge表引擎将数据保存在多个文件中,每个文件对应一个分区,每个分区内的数据都是按照给定的排序键排序的。当查询的时候,ClickHouse会自动合并多个文件中的数据,并返回查询结果。

而MergeTree表引擎则将数据保存在多个磁盘分区中,每个分区内又包含多个数据块,每个数据块内的数据都是按照给定的排序键排序的。当一个分区的数据量达到一定阈值时,ClickHouse会启动一个后台进程将分区内的数据进行合并。查询时,ClickHouse会直接从磁盘分区中读取数据,并返回查询结果。

查询流程示意图

            Merge表引擎                       MergeTree表引擎
        +----------+                    +----------+
        | 分区 1   |                    | 分区 1   |
        +----------+                    +----------+
        | 文件 1  |------+              | 数据块 1 |------+ 
        +----------+      |             +----------+      |
        | 文件 2  |------+ |            | 数据块 2 |------+ |
        +----------+      |            +----------+      |
        |    ...   |      |            |    ...   |      |
        +----------+      |            +----------+      |
                         合并          合并             |
        +----------+      |            +----------+      |
        | 文件 n  |------+ |            | 数据块 n |------+ |
        +----------+      |            +----------+      |
                          |                              |
        +----------+      |            +----------+      |
        | 分区 2   |      |            | 分区 2   |      |
        +----------+      |            +----------+      |
        | 文件 1  |------+             | 数据块 1 |------+ 
        +----------+                    +----------+
        | 文件 2  |------+             | 数据块 2 |------+ 
        +----------+      |            +----------+      |
        |    ...   |      |            |    ...   |      |
        +----------+      |            +----------+      |
                         合并          合并             |
        +----------+      |            +----------+      |
        | 文件 m  |------+ |            | 数据块 m |------+ |
        +----------+      |            +----------+      |
                          |                              |
            ...            |                              |
                          |                              |
        +----------+      |            +----------+      |
        | 分区 k   |      |            | 分区 k   |      |
        +----------+      |            +----------+      |
        | 文件 1  |       |            | 数据块 1 |      |
        +----------+      |            +----------+      |
        | 文件 2  |       |            | 数据块 2 |      |
        +----------+      |            +----------+      |
        |    ...   |       |            |    ...   |      |
        +----------+      |            +----------+      |
                         合并          合并             |
        +----------+      |            +----------+      |
        | 文件 p  |       |            | 数据块 p |      |
        +----------+      |            +----------+      |
        | 文件 q  |       |            | 数据块 q |      |
        +----------+      |            +----------+      |
        |    ...   |       |            |    ...   |      |
        +----------+      |            +----------+      |

查询流程:

  1. 根据查询条件选择需要查询的分区。
  2. 对于Merge表引擎,读取每个分区内的所有文件,将这些文件合并成一个结果集;对于MergeTree表引擎,定位到包含查询条件的数据块。
  3. 返回查询结果。

你以为结束了

下一篇我们继续挖坑,

在这里插入图片描述

大家看完发现有什么错误,写在下面吧!跟我黑虎阿福比划比划! 在这里插入图片描述