这是我参与「第五届青训营 」伴学笔记创作活动的第 13 天
本文记录青训营课程中学习clickhouse存储原理内容
导言
ClickHouse是面向OLAP Query场景设计的,由俄罗斯的Yandex于2016年开源的DBMS。它之所以能够获得极致的查询性能和底层极致的存储设计密切相关。
OLTP数据库:OLTP (online transactional processing) 数据库是一种高速分析数据库,专为多个用户执行大量事而设计
OLAP数据库:OLAP (online analytical processing) 数据库旨在同时分析多个数据维度,帮助团队更好理解其数据中的复杂关系
介绍
OLAP数据库具有与普通关系型数据库不同的特点:
大量数据的读写、多维分析,复杂的聚合函数、窗口函数,自定义UDF(user define function)、离线实时分析等
clickhouse采用列式存储:
其特点为将数据每个字段拆分开,按照字段进行“列”存储
列式存储的主要优点有:
数据压缩:通过压缩重复数据,在特定列上进行计算,可以使读的数据更少,在IO密集型计算中获得更大的性能优势;
延迟物化:推迟将列数据转换为可以被计算和输出的行数据或者内存数据,对缓存、CPU、内存宽带友好
原理
ClickHoue的主键索引是⼀种在索引构建成本和索引效率上相对平衡的稀疏索引。
primary.idx是表的主键索引,ClickHouse对主键索引的定义和传统数据库的定义稍有不同,CK主键不能去重,但仍然有快速查找主键行的能力。ClickHouse的主键索引存储的是每⼀个颗粒中起始行的主键值,而MergeTree存储中的数据是按照主键严格排序的。
所以当查询给定主键条件时,我们可以根据主键索引确定数据可能存在的颗粒区间,再结合下面介绍的Mark标识,我们可以进⼀步确定数据在列存文件中的位置区间。通过解析索引文件内容可以理解primary.idx存储内容。
操作特点
Clickhouse是个分析型数据库。这种场景下,数据一般是不变的,因此Clickhouse对update、delete的支持是比较弱的,实际上并不支持标准的update、delete操作。
Clickhouse通过alter方式实现更新、删除,它把update、delete操作叫做mutation(突变)。
标准SQL的更新、删除操作是同步的,即客户端要等服务端反回执行结果(通常是int值);而Clickhouse的update、delete是通过异步方式实现的,当执行update语句时,服务端立即反回,但是实际上此时数据还没变,而是排队等着。
参考:
第五届青训营 ClickHouse-你没见过的列存储.pptx - 飞书云文档 (feishu.cn)