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指令集优化过滤过程,但需考虑数据分布情况。
➡️

继续阅读