ClickHouse | 青训营笔记

71 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 14 天, 今天主要了解了列存储clickHouse,学习了列存和行存的区别和优缺点。

数据库分类

数据库是结构化信息或数据的有序集合。 OLTP:主要针对大量事务、点查场景。 OLAP:数据分析,多数据维度

OLAP特点

  1. 读写,PB级别存储
  2. 多维分析,需要复杂的聚合函数。
  3. 窗口函数
  4. 离线实时分析

SQL

selectexpfromtablewhereconditiongroup byexporder byexp

优势

  1. 标准化
  2. 高度非过程化,用户指出做什么,不用指明怎么做
  3. 多种方式:命令行或嵌入其他语言

SQL执行

  • parser:词法分析语法分析,生成AST树
  • analyzer: 变量绑定、语义检查等
  • optimizer:生成最优执行计划,进行代价评估
  • executor:执行计划翻译成物理计划

列式存储

1.数据压缩
LZ4模型,重复项越多压缩率越高
Run-length encoding模型,压缩重复数据,可直接计算

  1. 数据选择 聚合计算友好
  2. 延迟物化,物化指的是列数据转化为计算的过程
  3. 向量化,SIMD单指令多数据

行存vs列存

行存列存
优点insert/update简单投影高效
缺点选择时数据浪费多
很多时候只需要及列数据
列重新组装
insert/update麻烦
点查询不合适
场景点查询
增删改查多
统计分析类查询
即时查询

clickhouse存储

索引

常见索引

  1. hashindex不适合范围查询
  2. btree 每个节点都按照升序排列key值
  3. b+tree 叶子节点之间有双向链表,可以方便的范围查询。

LSM tree

注重顺序写入,使用稀疏索引加速查询。

数据结构

  1. SSTable磁盘数据结构
    注意写入磁盘不可更改,只能新写一个替换
  2. Memtable内存数据结构
    实现大多是二叉树

场景

  1. 大宽表查询,非常多的列
  2. 线上分析