这是我参与「第五届青训营 」笔记创作活动的第15天。
引言
今天的课程中,老师首先讲解了数据库的基本概念,之后讲述列式存储的知识,比较了其相比行式存储的优点等,之后就开始重点讲述列式存储-ClickHouse的设计和使用场景。
一、本堂课重点内容
本堂课的知识点
- 数据库基本概念
- 列式存储
- ClickHouse存储设计
- ClickHouse典型应用场景
二、详细知识点介绍
数据库分类
-
关系数据库:把数据以表的形式进行储存,然后再各个表之间建立关系,通过这些表之间的关系来操作不同表之间的数据。
-
非关系数据库 : NoSQL 即非关系数据库,支持存储和操作非结构化及半结构化数据。相比于关系型数据库,NoSQL没有固定的表结构,且数据之间不存在表与表之间的关系,数据之间可以是独立的。NoSQL的关键是它们放弃了传统关系型数据库的强事务保证和关系模型,通过所谓最终一致性和非关系数据模型(例如键值对,图,文档)来提高Web应用所注重的高可用性和可扩展性。
-
单机数据库:在一台计算机上完成数据的存储和查询的数据库系统。
-
分布式数据库:分布式数据库由位于不同站点的两个或多个文件组成。数据库可以存储在多台计算机上,位于同一个物理位置,或分散在不同的网络上。
-
OLTP(Online transactional processing) 数据库 :是一种高速分析数据库,专为多个用户执行大量事务而设计。
-
OLAP (Online analytical processing) 数据库:旨在同时分析多个数据维度,帮助团队更好地理解其数据中的复杂关系
什么是列式存储?
在关系型数据库中一张表
当为行式存储时:一个结点保存一行的数据
当为列式存储时:一个结点保存一列的数据
行式存储的优缺点
- 优点:一行的数据都保存在一起,对数据进行增加、修改和删除操作更容易
- 缺点:当只是想要查询一条记录中的几列的时候,会把一条记录所有列的数据搜索出来,导致搜索太慢
- 适用场景:点查询(返回记录少),增、删、改操作较多的场景
列式存储的优缺点:
- 优点:数据压缩时可以使读的数据量更少,相同类型压缩效率更高,查询时,只有涉及到的列会被读取,所以查询速度会相对较快,投影很高效,延迟物化,任何列都可做索引
- 缺点:选择完成时,被选择的列要重新组装 添加,修改,删除操作相对比较麻烦
- 适用场景:统计分类查询(OLAP,涉及列操作较少),即时查询
ClickHouse存储设计
表定义和表结构
索引设计
对于大数据量,B树,B+树的深度仍然太高了
ClickHouse采用了LSM-Tree结构作为索引
Log-structured merge-tree(LSM):着重优化顺序写入
主要数据结构:
- SSTables
- 将Key按顺序存储到文件中,称为segment
- 包含多个segment
- 每个segment写入磁盘后都是不可更改,新加的数据只能生成新的segment
- Memtable
- 在内存中的数据保存在mentable中,大多数实现都是一棵BST(Binary Search Tree)
- 当memtable存储的数据到达一定阈值时,就会按顺序写入磁盘
三、实践练习例子
待补充
四、课后个人总结
今天这堂课程学习到了列式存储数据库相关知识,之前自己只是听说过,并没有去学习,今天这次课程让我对于列式存储有了大体的理解,明白了为什么需要列式存储数据库,后期需要结合项目去使用ClickHouse,加深理解。
五、引用参考
[1] 青训营课程资料 【后端专场 学习资料七】第五届字节跳动青训营 - 掘金 (juejin.cn)
[2] 课件 第五届青训营 ClickHouse-你没见过的列存储.pptx - 飞书云文档 (feishu.cn)