这是我参加「第五届青训营 」伴学笔记创作活动的第 15 天。今天主要学习列存储数据库ClickHouse的相关知识。
重点内容
1、列式存储
2、ClickHouse存储设计
主要知识点
一、数据库基本概念
数据库是结构化信息或数据的有序集合,一般以电子形式存储在计算机系统中。通常由数据库管理系统(DBMS)控制。在现实中,DBMS及关联应用一起被成为数据库系统,通常简称为数据库。
二、列式存储
列式存储顾名思义,即数据库的每个存储单元都是按列进行划分的。
其优点在于:
-
数据压缩:列式存储可以使读的数据量更少,在I/O密集型计算中获得更大的性能优势
-
数据选择:列式存储可以选择特定的列做计算,对聚合计算友好
-
延迟物化:
- 物化是指将列数据转换为可以被计算或者输出的行数据或者内存数据的结果与过程。
- 延时物化可以尽可能推迟物化操作的发送,从而避免多次执行物化操作。
- 向量化
三、ClickHouse存储设计
1、表定义和结构
- 分布式表:不存储数据,用于将查询路由到集群的各个节点
- 本地表:实际存储数据的表
2、集群架构
3、引擎架构
4、存储架构
part和partition
- part:物理文件夹的名字
- partition:逻辑结构
part和column
- 每个column都是一个文件
- 所有的column文件都在自己的part文件夹下
dolumn和index
- 一个part有一个主键索引
- 每个column都有列索引
5、索引设计
Hash Index
- 将输入的key通过一个HashFunction映射到一组bucket上
- 每个bucket都包含一个指向一条记录的地址
- 哈希索引在查找的适合只适用于等职比较
B-Tree
- 数据写入是有序的,支持增删查改
- 每个节点有多个孩子节点
- 每个节点都按照升序排列key值
- 每个key都有两个指向左右孩子节点的引用其中左孩子保存的key小于当前key,有孩子的key大于当前key
LSM tree
- 着重优化顺序写入
- 包含SSTables与Memtable两种主要数据结构
Memtable
- 在内存中的数据保存到Memtable中,大多数实现都是一颗B-Tree
- Memtable存储有一定的阈值,超过这一阈值就会按顺序写入到磁盘中
总结
今天主要学习了列式存储的基本概念与设计思想,同时了解了其具体应用常见,收获颇多。