文章目录
Clickhouse为什么做查询分析那么快?
因为clickhouse使用了下列方案:
- clickhouse 数据分区
- clickhouse 列式存储
- clickhouse 一级索引(主键索引)
- clickhouse 二级索引(跳数索引)
- clickhouse 数据压缩
- clickhouse 数据标记
结合两个需求场景来理解
- 数据插入
- 数据查询
1. 数据分区(MergeTree)
关于表分区目录结构: MergeTree表的分区目录物理结构:
假设有一个分区表:该表有a, b, date, name四个字段,其中date是分区字段(按月份)
那么对于分区有两个问题:
- 分区文件夹的命名规则是什么?合并规则是什么?
- 分区文件夹中的文件列表,各是什么作用,什么含义?
1.1 命名规则 & 合并规则
ParitionID_MinBlockNum_MaxBlockNum_level,示例202103_1_1_0
ParitionID: 分区字段的值
MinBlockNum: 最小快序号
MaxBlockNum: 最大块序号
Level: 参与合并的次数
BlockNum是表内全局累加,每次创建一个新的分区目录,就会累加1。
文件目录的变化过程
-- 假设有两条语句
A: insert into table values ('2021-06', 'a'), ('2021-07', 'b');
B: