列存储基础 | 青训营笔记

97 阅读2分钟

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

  • OLAP 数据库

    • OLAP (Online analytical processing) 数据库旨在同时分析多个数据维度,帮助团队更好地理解其数据中的复杂关系
    • 适合场景:
      • 大量数据的读写,PB级别的存储
      • 多维分析,复杂的聚合
      • 函数窗口函数,自定义UDF(User DefineFucntion)
      • 离线/实时分析。
  • 列式存储优点

    • 数据压缩,确定一列数据的规律

      • 查询时可以时读的数据量更少,在IO密集型计算中获得更多的性能优势
      • 相同类型压缩效率更高
      • 可以针对不同类型使用不同的压缩算法。LZ4,run-length encoding,delta encoding
    • 数据选择优势大

      • 可以选择特定的列做计算而不是读所有列-
      • 对聚合计算友好
    • 更适合做延迟物化

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

      • 向量化基于SIMD (single instruction multiple data) 。对于现代多核CPU,其都有能力用一条指令执行多条数据。
      • 用SIMD指令完成的代码设计和执行的逻辑就叫做向量化
      • 向量化对数据格式有要求:要处理的数据需要是连续内存;需要明确数据类型
      • 执行模型要求:数据需要按批读取;函数的调用需要明确数据类型;
      • 列存数据库适合设计出这样的执行模型从而使用向量化技术:因为本身按列读取,可以保证数据按批,在内存中连续;可以根据列的类型定义数据读写逻辑;函数按列类型处理
  • 总结

    学习了列存储的适用场景和列存储的优点,对于后续讲解的ClickHouse索引结构还需要继续学习。