“ 摘要: 本文主要讲述ClickHouse开源数据库对于分区、索引、标记和压缩数据的协同工作相关知识点。主要内容如下:
概述
写入过程
查询过程
数据标记与压缩数据块的对应关系
结论
”
01
—
概述
分区、索引、标记和压缩数据,这些组件配合在一起给ClickHouse数据库带来非常高效的查询性能。前面的文章也单独介绍了这几个组件。接下来,就分别从写入过程、查询过程,以及数据标记与压缩数据块的三种对应关系的角度展开介绍。
02
—
写入过程
生成分区目录
数据写入的第一步是生成分区目录,伴随着每一批数据的写入,都会生成一个新的分区目录。在后续的某一时刻,属于相同分区的目录会依照规则合并到一起。
生成索引
按照index_granularity索引粒度,会分别生成primary.idx主键索引(如果声明了二级索引,还会创建二级索引文件)。
生成标记和数据压缩文件
按照index_granularity索引粒度,分别生成每一个列字段的.mrk数据标记和.bin压缩数据文件。
各个底层物理文件生成的过程
下图所示是一张MergeTree表在写入数据时,它的分区目录、索引、标记和压缩数据的生成过程。
从分区目录201403_1_34_3能够得知,该分区数据共分34次写入,期间发生过3次合并。在数据写入的过程中,依据index_granularity的粒度,依次为每个区间的数据生成索引、标记和压缩数据块。其中,索引和标记区间是对齐的,而标记与压缩块则根据区间数据大小的不同,会生成多对一、一对一和一对多三种关系。
03
—
查询过程
借助索引文件降低扫描范围
数据查询的本质,可以看作一个不断减小数据范围的过程。在最理想的情况下&#x