开启掘金成长之旅!这是我参与「掘金日新计划 · 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 | |
+----------+ | +----------+ |
| ... | | | ... | |
+----------+ | +----------+ |
查询流程:
- 根据查询条件选择需要查询的分区。
- 对于Merge表引擎,读取每个分区内的所有文件,将这些文件合并成一个结果集;对于MergeTree表引擎,定位到包含查询条件的数据块。
- 返回查询结果。
你以为结束了
下一篇我们继续挖坑,
大家看完发现有什么错误,写在下面吧!跟我黑虎阿福比划比划!