初始ClickHouse| 青训营笔记

105 阅读3分钟

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

本文是对于掘金课程的课程笔记,针对课程内容的一些重难点、本人在学习ClickHouse知识时候进行的简单记录。

一、本堂课的重点内容

  1. 数据库基本概念
  2. 列式存储
  3. ClickHouse存储设计
  4. ClickHouse典型应用场景

二、详细知识点介绍

数据库基本概念

数据库是结构化信息或数据的有序集合。

类型: 按关系:

  • 关系数据库:把数据以表的形式进行存储。
  • 非关系数据库:NoSQL或非关系数据库,支持存储和操作非结构化及半结构化数据,没有固定表结构,数据之间不存在表与表之间的关系。 按单机与分布式
  • 单机数据库
  • 分布式数据库

OLTP与OLAP

  • OLTP数据库:大量事务
  • OLAP数据库:分析多个数据维度,帮助团队理解数据关系

重点理解OLAP数据库

  • 大量数据读写
  • 多维分析
  • 窗口函数,自定义UDF
  • 离线/实时分析

SQL的优点

  • 标准化
  • 高度非过程化
  • 以同一种语法结构提供两种使用方式
  • 语言简洁,易学易用

数据库架构:

image.png

列式存储

优点:

  • 数据压缩:相同类型压缩效率更高,常用压缩算法LZ4,Run-length encoding,delta encoding
  • 数据选择:可以选择特定的列做计算,而不是读所有的列,对聚合计算友好
  • 延迟物化(物化:将列数据转换为可以被计算或者输出的行数据或者内存数据结果的过程),缓存友好,CPU/内存带宽友好,可以利用执行计划和算子的优化,保留直接在压缩列做计算的机会

行存 VS 列存

image.png

ClickHouse存储设计

  • 分布式表:不存储数据,用于将查询路由到集群的各个节点
  • 本地表:实际存储数据的表

引擎架构:

image.png

索引设计:

  • B-Tree,数据写入有序,每个节点有多个孩子节点,每个节点按照升序排列key值
  • B+Tree,所有数据都存储在叶子节点,非叶子节点只保存key值,叶子结点维护到相邻叶子结点的引用,可以通过key做二分查找,也可以通过叶子结点做顺序访问

查询优化:

  • 再建一个表
  • 建一个物化视图
  • 使用Projection

ClickHouse典型应用场景

离线数据分析:

  • 数据导入
  • 数据按列导入

使用memory table减少parts数量

复杂类型查询:

  • bitmap索引
  • Bitmap64类型
  • lowcardinality

三、课后个人总结

本节课主要介绍了ClickHouse,这是一种不同于我们平时开发使用的行数据库的一种数据库,使用的是列式存储结构。与行数据库相比有优势也有劣势,有时候结合使用可以更好地进行项目开发。