这是我参与「第五届青训营 」伴学笔记创作活动的第 13 天
本文是对于掘金课程的课程笔记,针对课程内容的一些重难点、本人在学习存储知识时候进行的简单记录。
一、本堂课的重点内容
- 经典案例
- 存储&数据库简介
- 主流产品剖析
- 新技术演进
二、详细知识点介绍
经典案例
数据的产生:当小明填写好资料,注册好用户之后,数据便从无到有产生了
数据的流动:一条用户注册数据->后端服务器->数据库->其他系统
数据的持久化:校验数据的合法性->修改内存->写入存储介质
问题:
- 数据保证不丢?
- 多人同时修改?
- 除了数据库别的存储介质?
- 数据库只能处理结构化数据吗?
- 哪些操作数据库方式?用什么编程语言?
存储&数据库简介
什么是存储系统?
一个提供了读写、控制接口,能够安全有效地把数据持久化的软件,可以称之为存储系统。
系统特点:
- 性能敏感
- 存储系统代码,简单(读写代码简单)又复杂(非IO路径上的各种异常处理复杂)
- 存储系统软件架构,容易受硬件影响
存储器层级结构
- 最上层极小容量,极快
- 最下层大容量,很慢(磁带)
数据怎么从应用到存储介质?
- 缓存很重要,贯穿整个存储体系
- 拷贝很昂贵,尽量减少(消耗CPU)
RAID技术:
单机存储系统怎么做到高性能,高性价比,高可靠性?
RAID:Redundant Array of Inexpensive Disks
- RAID0: 多块磁盘简单组合,没有额外容错设计
- RAID1:一块磁盘对应一块额外镜像盘,真实空间利用率只有50%,容错能力强
- RADI0+1:结合RAID0和RAID1,真实空间利用率仍然50%,容错能力强,写入带宽好
数据库和存储系统不一样吗?
- 关系型数据库:结构化数据友好,支持事务,支持复杂查询语言
- 非关系型数据库:半结构化数据友好,可能支持事务,可能支持复杂查询语言
关系:反映了事物间的关系 关系代数:对关系作运算的抽象查询语言 SQL:方便人类阅读的关系代数表达形式
数据库 vs 经典存储
- 写入关系型数据库,以表形式管理
- 用经典的存储系统,写入文件,自行定义管理结构
- 数据库支持事务能力(ACID,原子性,一致性,隔离性,持久性)
- 复杂查询能力
主流产品剖析
- 单机存储
- 分布式存储
- 单机关系数据库
- 单机非关系型数据库
- 分布式数据库
单机存储
单机存储 = 单个计算机节点上的存储软件系统,一般不涉及网络交互
本地文件系统
linux:一切皆文件,两大数据结构index node&directory entry
key-value存储:常见数据结构lsm-tree,拳头产品RocksDB
分布式存储
HDFS:堪称大数据时代的基石
核心特点:
- 支持海量数据存储
- 高容错性
- 弱POSIX语义
- 使用普通x86服务器,性价比高
Ceph:开源分布式存储系统里的万金油
核心特点:
- 一切皆对象
- 采用主备复制模型
- 数据分布模型采用CRUSH算法
单机数据库
关系型数据库:
商业产品Oracle称王,开源产品MySQL&PostgreSQL称霸
通用组件:
- Query Engine
- Txn Manager
- Lock Manager
- Storage Engine
- Replication
非关系型数据库:
MongoDB、Redis、Elasticsearch三足鼎立
分布式数据库
解决容量问题:
- 单点容量有限,受硬件限制
- 存储节点池化,动态扩缩容
解决弹性问题:
- CPU紧张不够用,扩容
- 缩容,数据无法写入
- 池化,解决容量问题
解决性价比问题
- 要写500GB数据,容量不够了,但是CPU里利用率只有20%
- 扩容,CPU利用率只有10%
- 使用共享存储池,不需要扩CPU
挑战:
- 单写 VS 多写
- 从磁盘弹性到内存弹性
- 分布式事务优化
新技术演进
- SPDK:直接从用户态访问磁盘,中断->轮询,无锁数据结构
- AI&Strorage
- 高性能硬件
三、课后个人总结
本次课程让我对存储系统和数据库有了进一步了解,也解开了我之前对存储系统和数据库概念的混淆问题。如果要开发项目,存储是绕不开的一步,数据必须持久化,且存储的过程也非常重要,于是针对各种存储问题,本次课程进行了系统性地说明,也介绍了各种数据库及其特性,让人受益匪浅。