ClickHouse - 你没有见过的列存储

82 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第16天。

OLAP数据库

OLAP数据库: OLAP (Online analytical processing)数据库旨在同时分析多个数据维度,帮助团队更好地理解其数据中的复杂关系。

  • 大量数据的读写,PB级别的存储
  • 多维分析,复杂的聚合函数
  • 窗口函数,自定义UDF(User Define Fucntion)
  • 离线/实时分析

列式存储

列式存储的优点

数据压缩:

  • 数据压缩可以使读的数据量更少,在IO密集型计算中获得更大的性能优势
  • 相同类型压缩效率更高
  • 排序之后压缩效率更高
  • 可以针对不同类型使用不同的压缩算法

Delta encoding:

  • 将数据存储为连续数据之间的差异,而不是直接存储数据本身
  • 特定算子也能直接在压缩数据上计算

数据选择:

  • 可以选择特定的列做计算而不是读所有列
  • 对聚合计算友好

延迟物化:

  • 物化:将列数据转换为可以被计算或者输出的行数据或者内存数据结果的过程,物化 后的数据通常可以用来做数据过滤,聚合计算,Join
  • 延迟物化: 尽可能推迟物化操作的发生
  • 缓存友好
  • CPU /内存带宽友好
  • 可以利用到执行计划和算子的优化,例如filter
  • 保留直接在压缩列做计算的机会

向量化:

  • SIMD(single instruction multiple data),对于现代多核CPU,其都有能力用一条指令执行多条数据
  • 数据格式
  • 执行模型

数据格式要求:

  • 需要处理多个数据,因此数据需要是连续内存
  • 需要明确数据类型

执行模型要求:

  • 数据需要按批读取
  • 函数的调用需要明确数据类型

列存数据库适合设计出这样的执行模型,从而使用向量化技术:

  • 按列读取
  • 每种列类型定义数据读写逻辑
  • 函数按列类型处理