课程地址:RDBMS 基本情况介绍 - 掘金 (juejin.cn)
认识存储与数据库
一条数据的生命周期
-
例子:用户注册
- 数据的产生:用户点击注册按钮填入信息并确认注册
- 数据的流动:用户手机 -> 后端服务器 -> 数据库(持久化) -> 其他系统
-
数据的持久化 1. 校验数据合法性 1. 修改内存:用高效的数据结构组织数据,即变成能存入数据库的样子 1. 写入存储介质:以寿命&性能友好的方式写入硬件
-
潜在的问题
- 数据库怎么保证数据不丢失?
- 处理多人同时修改的问题?
- 为什么用数据库,除了数据库还能存到别的存储系统吗?
- 数据库只能处理结构化数据吗?
- 有哪些操作数据库的方式,要用什么编程语言?
存储系统
-
什么是存储系统:存储系统提供写入和读出计算机工作需要的信息(程序和数据)的能力,实现计算机的信息记忆功能。即一个提供了读写、控制类接口,能够安全有效的把数据持久化的软件。
-
特点:
-
作为后端软件的底座,对性能极其敏感
-
存储系统软件架构,容易受硬件影响
-
存储系统代码,既“简单”又“复杂”
- 简单:在I/O路径上,代码不能很复杂,性能需要很高
- 复杂:在错误处理上需要考虑很多异常情况
-
-
存储器层级结构
- 塔尖的存储设备:容量极小但能支撑超高性能的访问
- 中间的存储设备(Persistent Memory)
- 底部的存储设备:容量很大但读写速度很慢且访问方式不友好
数据怎么从应用到存储介质
-
缓存:很重要,贯穿整个存储体系
- 作用:让软件用硬件友好的方式与硬件交互
-
拷贝:很昂贵,应尽量减少
- 原因:很消耗CPU
-
硬件设备五花八门,需要有抽象统一的接入层
RAID技术
-
是什么:RAID ( Redundant Array of Independent Disks )即独立磁盘冗余阵列,简称为「磁盘阵列」,其实就是用多个独立的磁盘组成在一起形成一个大的磁盘系统,从而实现比单块磁盘更好的存储性能和更高的可靠性。
-
出现的背景:
- 单块大容量磁盘的价格 > 多块小容量磁盘
- 单块磁盘写入性能 < 多块磁盘并发写入性能
- 单块磁盘的容错能力有限,不够安全
-
常见的RAID方案
-
RAID 0
- 多块磁盘的简单组合
- 数据条带化存储,提高磁盘带宽
- 优点:写入性能提升
- 缺点:没有额外的容错设计
-
RAID 1
- 一块磁盘对应一个额外镜像盘
- 优点:容错能力强
- 缺点:真实空间利用率仅50%
-
RAID 0+1
- 结合了RAID 0 和 RAID 1
- 缺点:真实空间利用率仍为50%
- 优点:有RAID 0 和RAID 1 的优点
-
数据库
数据库和存储系统的异同
数据库的两种类型
-
关系型数据库:
-
相同点:是存储系统,但是多了一些功能
-
不同点
- 结构化数据友好
- 支持事务
- 支持复杂查询语言(例如SQL语言)
-
-
非关系型数据库
-
相同点:是存储系统,但是一般不要求严格的结构化
-
不同点
- 半结构化数据友好
- 可能支持事务
- 可能支持复杂查询语言S
-
解释
-
什么是 “关系”
- 关系模型:集合,即任意元素组合的若干有序偶对
- 关系代数:对关系作运算的抽象查询语言
- SQL:一种DSL,方便人类阅读的关系代数表达形式
-
什么是 “结构化数据管理”
- 数据以行为单位,一行数据表示一个实体的信息,每一行数据的属性是相同的,存储在数据库中
- 能够用数据或统一的结构加以表示,如数字、符号
- 能够用二维表结构来逻辑表达实现,包含属性和元组,如:成绩单就是属性,90分就是其对应的元组。
-
事务能力
- A (tomicity):事务内的操作要么全做,要么不做
- C (onsistency):事务执行前后,数据状态是一致的
- I (solation):可以隔离多个并发事务,避免影响
- D (urability):事务一旦提交成功,数据保证持久性
-
复杂的查询能力
- 与经典存储系统相比,数据库的复杂查询代码更加灵活简洁
主流产品剖析
单机存储系统
- 定义:单个计算机节点上的存储软件系统,一般不涉及网络交互
- 例如:本地文件系统、Key-Value存储
本地文件系统
-
管理单元:文件
-
文件系统接口:文件系统很多,但都遵循VFS的统一抽象接口
-
Linux文件系统两大数据结构:Index Node & Directory Entry
-
Index Node:记录文件元数据,例如Id、大小、权限、磁盘位置等,inode是一个文件的唯一标识(一一对应),会被存储到磁盘上,inode的总数在格式化文件系统时就固定了
-
Directory Entry:记录文件名、inode指针,层级关系(parent)等dentry是内存结构,与inode的关系是N:1(hardlink的实现)
- D-entry是一个纯内存的结构,不会被存到持久化设备上
-
Key-Value
- 常见使用方式:put(k,v) & get(k)
- 常见数据结构:LSM-Tree,每种程度上牺牲读取性能,追求写入性能
分布式存储系统
- 定义:在单机存储基础上实现了分布式协议,涉及大量网络交互
- 例子:分布式文件系统、分布式对象存储
分布式文件系统 - HDFS
-
HDFS - 大数据时代的基石
-
时代背景:专用的高级硬件很贵,同时数据存量很大,要求超高吞吐
-
HDFS的核心特点:
- 支持海量数据存储
- 高容错性(当硬件坏了的时候数据不会丢)
- 弱POSIX语义
- 使用普通x86服务器,性价比高
-
架构:
- Management Node:管控面,在此拿到物理位置
- Storage Node:用物理位置在此读取数据
开源分布式存储系统里的万金油 - Ceph
-
核心特点:
-
一套系统支持对象接口、块接口、文件接口,但是一切皆对象
-
数据写入采用主备复制模型
- 主备复制模型:写入数据时先写入主节点,做链状的冗余复制
-
数据分布模型采用CRUSH算法
- 数据分布模型:写入数据时,为保证可靠性和可用性,往往会将数据分成几个部分,在系统中做冗余存储,数据分布模型用于分配这几部分的分布
- CRUSH算法:用HASH+权重+随机抽签的方式,确定落地存储的服务器
-
单机数据库
- 定义:单个计算机节点上的数据库系统
- 事务在单机内执行,也可能通过网络交互实现分布式事务
- 分类:关系型数据库、非关系型数据库
关系型数据库
-
商业产品:Oracle
-
开源产品:MySQL & PostgreSQL
-
关系型数据库通用组件:
- Query Engine:负责解析quey,生成查询计划
- Txn Manager:负责事务并发管理
- Lock Manager:负责锁相关的策略
- Storage Engine:负责组织内存/磁盘数据结构
- Replication:负责主备同步
-
关键内存数据结构:B-Tree、B+-Tree、LRU List等
-
关键磁盘数据结构:WriteAheadLog(RedoLog)、Page
原理解释
-
Memory 内存结构
- 数据在关系型数据库中用树状存储
- Page:每个节点是一个Page
- Modify:插入数据时本质上是更新Page结构
- RedoLog:插入数据时的操作日志,保证数据不丢失
- TempData:临时数据,当查询过程中内存不够用时,将计算结果放入TempData中,最后再拼起来
-
HardDisk 磁盘结构
- PageFiles:对应内存结构中的树中的Page
- RedoLog Files:存储事务执行过程中的RedoLog
- Others:当内存不够用时先将TempData中的数据存入,等内存够用时在load到内存中进行整合
非关系型数据库
-
与关系型数据库相比:
- 非关系型数据库交互方式各不相同
- 没有关系约束,schema相对灵活
-
常见的非关系型数据库:mongoDB、Redis、Elasticsearch
分布式数据库
-
优点:
- 容量:单机容量有限,而储存节点池化(Storange Pool)可以动态扩缩容
- 弹性:当用户更换硬件时,存储节点池化可以让用户不需要换硬盘进行数据复制或者删除
- 性价比:存储池动态扩容比较便宜
-
还可以升级的地方:
- 并行写入
- 内存弹性
- 分布式事务优化
新技术演进
-
软件架构变更:
- 现有存储架构很多年没有革命性变更
- 存储数据库软件强依赖于操作系统内核的一些链路
- 新技术:Bypass OS kernel
-
AI增强
- 只能存储格式转换
-
新硬件革命
- 存储介质变更
- 计算单元变更
- 网络硬件变更
-
SPDK - Bypass OS kernel已经成为一种趋势
-
AI & Storage
在Storage领域,AI能带来什么改变
-
行存储 -> 列存储 - AI存储 -> 行列混存
- 用AI来决定行存储还是列存储
-
-
高性能硬件
-
RDMA网络
- 传统的网络协议栈,需要基于多层网络协议处理数据包,存在用户态&内核态的切换,足够通用但性能不是最佳
- RDMA是kernel bypassl的流派,不经过传统的网络协议栈,可以把用户态虚拟内存映射给网卡,减少携贝开销,减少cpu开销
-
Persistent Memory
- 在NVMe SSD和Main Memory间有一种全新的存储产品:Persistent Memory
- IO时延介于SSD和Memory:之间,约百纳秒量级
- 可以用作易失性内存(memory mode),也可以用作持久化介质(app-direct)
-
可编程交换机
- P4 Switch,配有编译器、计算单元、DRAM,可以在交换机层对网络包做计算逻辑。在数据库场景下,可以实现缓存一致性协议等
-
CPU/GPU/DPU
- CPU:从multi-.core走向may-cofe
- GPU:强大的算力&越来越大的显存空间
- DPU:异构计算,减轻CPU的workload
-