这是我参与「第五届青训营 」伴学笔记创作活动的第5天
经典案例
数据的流动
- 数据到了数据库才能被称为持久化的数据
- 为什么要持久化:
仅仅把数据存储在内存中,相当于服务没有记忆,每次用户都得注册
数据的持久化
一些问题
- 数据库怎么保证数据不丢失
- 数据库怎么处理多人同时修改问题
- 为什么用数据库,还有其他存储系统吗
- 数据库只能处理结构化数据吗
- 数据库的操作方式
存储&数据库简介
什么是存储系统
- 提供了读写、控制类接口,能够安全有效的把数据持久化的软件,就可以称之为存储系统
系统特点
- 存储系统作为后端软件的底座,对性能极其敏感,
- 存储系统代码,既简单又复杂,io路径上要简单,非io路径以及io路径的错误处理上要考虑全面
- 存储系统软件架构容易受硬件影响
存储器层级结构
- 塔尖设备特点:容量极小,能支持超高性能访问
- 塔底设备特点:容量很大,但是访问很不友好
数据怎么从应用到存储介质
- 整条链路上有很多buffer,贯穿整个存储体系
存储介质的访问不一定十分友好,也不一定按照软件的想法读写数据,因此在软件层实现buffer/cache以硬件友好方式读写很重要,能够跨软件层交互硬件
- 拷贝十分昂贵
拷贝越狠cpu消耗越狠,拷贝占了大量资源则其他操作就没有资源可用了
- 硬件设备五花八门,需要统一抽象的接入层
RAID技术
-
单机存储系统怎么做到高性能,高性价比,高可靠性:R(redundant)A(array)of I(inexpensive)D(disks)
-
背景:
-
RAID0
-
RAID1
-
RAID0+1
数据库
几个概念
- 什么是关系(relation)
关系=集合=任意元素组成的若干有序偶对,反映了事务间的关系
- 什么是关系代数
关系代数=对关系做运算的抽象查询语言,如:交,并,笛卡尔积
- SQL
SQL是一个DSL(domain specific language),是方便人类阅读的关系代数表达形式
关系型数据库
关系型数据库是存储系统,但是在存储之外又发展出其他能力
非关系型数据库
也是存储系统,但是一般不要求严格的结构化
数据库VS经典存储系统
- 结构化数据管理
- 数据库:写入关系型数据库,以表形式管理
- 经典存储系统:如文件系统,需要自行定义数据结构
- 数据库:写入关系型数据库,以表形式管理
- 事务能力
- 数据库支持事务能力,经典存储系统没有事务这个概念,若要基于经典存储系统实现ACID则需要内力
- 数据库支持事务能力,经典存储系统没有事务这个概念,若要基于经典存储系统实现ACID则需要内力
- 复杂查询能力
- 使用方式
主流产品剖析
单机存储
- 单机存储=单个计算机节点上的存储软件系统,一般不涉及网络交互
- 本地文件系统
- key-value存储
- 本地文件系统-一切皆文件
- index node
- directory entry
- index node
- key-value存储-世间一切皆Key-value
- LSM-tree:适配HDD,顺序写入性能友好,读性能牺牲
数据结构分为2部分
- 左边的内存(memory)数据结构
- 右边的磁盘(disk)数据结构 二者都遵循顺序写入原则,写入时不断追加给内存中的memTable,当memTable满了之后就会被刷到Immutable memTable中,当触发条件后Immutable memTable就会被顺序写入disk上的SSTable中,当level0满了会被下刷到level1,满了之后会继续下刷到level2,不断下刷后需要读到一个最新版本的k-v数据,然后合并所有level才能服务get请求
- LSM-tree:适配HDD,顺序写入性能友好,读性能牺牲
分布式存储
- 分布式存储=在单机存储的基础上实现了分布式协议,涉及大量网络交互
分布式文件系统
- HDFS:大数据时代的基石
- 架构
- namenode保存了系统的存储拓扑,需要读数据的时候先跟namenode交互拿到数据存在的物理位置之后才能到storagenode读取数据
- 在datanode上发展了计算框架,尽量使计算在datanode上进行
- 架构
分布式对象存储
- ceph分布式存储系统的万金油
单机数据库
- 单机数据库=单个计算机节点上的数据库系统,事务在单机内执行,也可能通过网络交互实现分布式事务
单机关系型数据库
- 关键组件
- 结构
- 内存
内存数据结构以树状结构来组织,树的节点是page,用户插入数据=更新内存的page,在更新page的同时还要记录一条Redo log(操作日志),保证更新操作不会丢失,内存中除了page和redo log还有temp data(临时数据),把一些排序结果或者joint结果存放为临时结果后续随着计算的推进再把临时数据拼起来变成最终结果,返回给用户
- 磁盘
存放page,Redolog和临时数据
单机非关系型数据库
- Elasticsearch
- mongoDB
- Redis
分布式数据库
- 单机数据库的问题和挑战
- 容量问题
单点数据库容量有限,即使再厉害的主机,硬盘容量都是有限的
将存储节点池化,在存储池中有很多物理和虚拟机,存储池和数据库通过网络交互,数据库完全不用关心容量问题,只要存储池能够在存量达到阈值后自动添加节点就行
- 弹性问题
- 性价比问题
- 容量问题
新技术演进
- 三个方向
- 软件架构变革
- AI增强:智能存储格式转换
- 新硬件革命:存储介质变更,计算单元变更,网络硬件变更