clickhouse MergeTree 存储结构
所属分类 clickhouse
浏览量 642
分区 索引 数据 标记
partition
分区目录,各类文件 primary.idx、data.mrk、data.bin 等
属于相同分区的数据,最终会被合并到同一个分区目录
checksums.txt
校验文件,二进制存储,保存 primary.txt、count.txt 等 文件的 大小及哈希值,用于快速校验文件的完整性和正确性
columns.txt
列信息文件,明文存储,用于保存分区下的列字段信息
count.txt
计数文件,明文存储,记录当前分区下的数据总数
primary.idx
一级索引文件,二进制存储,用于存储稀疏索引,一张 MergeTree 表只能声明一次一级索引(通过 ORDER BY 或 PRIMARY KEY)
data.bin
数据文件,使用压缩格式存储,默认 LZ4 格式,用于存储表的数据
老版本中每一个列字段都有独立的 .bin 数据文件,并以列字段命名
新版本中只有一个 data.bin
data.mrk
标记文件,二进制格式,保存 data.bin 文件中数据的偏移量信息,
标记文件与稀疏索引对齐,通过标记文件建立稀疏索引(primary.idx)与数据文件(data.bin)之间的映射关系
读取数据时,先通过稀疏索引(primary.idx)找到对应数据的偏移量信息(data.mrk),
再根据偏移量信息从 data.bin 文件中读取数据
data.mrk3
如果使用自适应大小的索引间隔,标记文件以 data.mrk3 结尾
partition.dat 和 minmax_[Column].idx
如果使用了分区键,例如上面的 PARTITION BY toYYYYMM(JoinTime),
会额外生成 partition.dat 与 minmax_JoinTime.idx 索引文件,二进制格式
partition.dat 用于保存当前分区下分区表达式最终生成的值,
minmax_[Column].idx 则负责记录当前分区下分区字段对应原始数据的最小值和最大值
user_activity_event 表中插入了 5 条数据
JoinTime 分别 2020-05-05、2020-05-15、2020-05-31、2020-05-03、2020-05-24
这 5 条数据会进入到同一个分区 2020-05
partition.dat 中存储的就是 2020-05,也就是分区表达式最终生成的值
同时还会有一个 minmax_JoinTime.idx 文件,里面存储 2020-05-03 2020-05-31
也就是分区字段对应的原始数据的最小值和最大值
skp_idx_[IndexName].idx 和 skp_idx_[IndexName].mrk3
建表语句中指定了二级索引,会额外生成相应的二级索引文件与标记文件
二级索引在 ClickHouse 中又被称为跳数索引,目前拥有 minmax、set、ngrambf_v1 和 token_v1 四种类型,
上一篇
下一篇
大萧条的一些特点
clickhouse ReplacingMergeTree
clickhouse MergeTree 写入与查询
clickhouse核心知识点
OLAP和OLTP的本质区别
Clickhouse基本使用