ClickHouse-列存储 | 青训营笔记

59 阅读2分钟

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

ClickHouse是比较新的技术了,据讲师所说,字节目前是国内对ClickHouse研究最深入的公司。

数据库的类型

  • OLTP(Online transactional processing) 数据库:一种高速分析数据库,专为多个用户执行大量事务而设计。
  • OLAP(Online analytical processing)数据库:旨在同时分析多个数据维度,帮助团队更好地理解其数据中的复杂关系

OLAP 数据库

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

列式存储

按照每个字段连续存储,而相对的行式存储则是按照行,一条条读入数据。

列式存储的优点:

  • 数据压缩
  • 数据选择
  • 延迟物化
    • 将列数据转换为可以被计算或者输出的航数据或者内存数据结果的过程,物化后的数据通常可以用来做数据过滤,聚合计算,Join
    • 缓存友好
    • CPU/内存带宽友好
    • 可以利用到执行计划和算子的优化,例如filter
    • 保留直接在压缩列计算的机会
  • 向量化
    • SIMD
    • 数据格式
    • 执行模型

缺点:

  • 选择完成时,被选择的列要重新组装
  • INSERT/UPDATE比较麻烦
  • 点查询不适合

使用场景:

  • 统计分析类查询
  • 即时查询(查询条件不确定,行存表扫描难以使用索引)

表定义和结构

  • 分布式表:不存储数据,用于将查询路由到集群的各个节点
    • cluster:逻辑集群,由多个节点组成
    • shard_key:指导数据写入分布式表时的分布方式
  • 本地表:实际存储数据的表

Clickhouse中存在多个存储引擎,用于在写入硬盘、数据分析等不同场景下使用。

索引的类型很多,B+ tree,hash,bitmap等等。即使对数据结构本身已经非常熟悉,但在数据库中还需要明确该种索引确切的作用,从行存、列存、点查询、范围查询等角度去分析。