ClickHouse内幕(1)数据存储与过滤机制
💡
原文中文,约5700字,阅读约需14分钟。
📝
内容提要
本文介绍了ClickHouse中的数据存储结构和索引结构,以及基于这些结构的数据过滤机制。
🎯
关键要点
- 本文介绍了ClickHouse中的数据存储结构和索引结构,以及数据过滤机制。
- ClickHouse的数据存储采用分区和文件细分的方式,数据按分区键划分为多个分区。
- 每个分区包含多个Part,Part是ClickHouse中最小的存储单元。
- Part内部文件组织包括主键索引文件、数据文件、元数据等。
- ClickHouse的存储是列式的,每个列单独存储,索引结构通过排序和稀疏索引实现。
- 查询时,ClickHouse通过索引文件定位数据,使用Mark来表示一组有序数据。
- KeyCondition用于检查范围矩阵是否满足过滤条件,支持Part裁剪和Mark裁剪。
- Part裁剪通过最大最小值索引和分区表达式进行,过滤掉不相关的Part。
- Mark裁剪是对Part内部数据的进一步过滤,最小粒度为Mark。
- Row过滤在查询执行阶段进行,使用Filter Mask和SIMD技术优化性能。
- Filter Mask用于标记符合过滤条件的行,分组处理提高了过滤效率。
- 使用SIMD指令集优化过滤过程,但需考虑数据分布情况。
🏷️
标签
➡️