【day16】ClickHouse - 你没有见过的列存储 | 青训营笔记

68 阅读2分钟

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

1.数据库基本概念

OLAP数据库

a.大量数据读写,PB级别的存储

b.多维分析,复杂的聚合函数

c.窗口函数,自定义UDF(User Define Function)

d.离线/实时分析

2.列式存储

列式存储优点:

a.数据压缩

b.数据选择【对聚合运算友好】

c.延迟物化【缓存友好;CPU/内存带宽友好;可以利用到执行计划和算子的优化;保留直接在压缩列上做计算的机会】

d.任何列都能作为索引

e.向量化计算

f.查询时只有涉及到的列会被读取

g.投影很高效

缺点:

a.选择完成时,被选择的列可能会被组装为行

b.Insert/Update比较麻烦

c.点查询不合适

试用场景:

a.统计分析查询【OLAP,如数据仓库服务】

b.即时查询

3.ClickHouse存储设计

分布式表:不存储数据,用于将查询路哟到集群的各个节点

本地表:实际存储数据的表

存储结构:

SSTable:顺序写入,只能删除和添加

MemoryTable:内存中的数据保存在其中

小结:

a.主键包含的数据顺序写入

b.主键构造主键索引

c.每个列构建一个稀疏索引

d.通过mark的选择让主键索引可以定位到每一列的索引

e.可以通过多种手段优化非主键列的索引

4.ClickHouse典型应用场景

a.大宽表存储和查询:

1)可以建非常多的列

2)可以增加、删除、清空每一列的数据

3)查询的时候引擎可以快速选择需要的列

4)可以将涉及到的过滤条件下推到存储层从而加快查询

b.动态表存储

1)map中的每个key都是一个列

2)map中的每一列都可以单独进行查询

3)使用方式同普通列,可以做任何计算

c.离线数据分析

d.实时数据分析

总结:

a.ClickHouse是标准的列存储结构

b.存储设计是LSM-Tree架构

c.使用系数索引加速查询

d.每个列都有丰富的压缩算法和索引结构

e.基于列存设计的高效的数据处理逻辑