一、导论
1. 数据的产生
案例:当小明从app输入数据点击登录的时候,数据就产生了,并发送到后端服务器。
分析:数据来源于用户,数据的多少取决于用户群体有多大。
2. 数据的流动
- 数据从用户端产生,发送到服务器进行处理,期间可能会经过代理服务器,同时后端服务器处理数据的过程中,数据有可能会经过中间件,最终到达数据库进行持久化,但这并没有结束,在数据库中的数据很有可能被其他系统所使用。
- 大体上的流动分为 前端-->后端服务器-->数据库
3. 数据的持久化
- 数据的持久化是最重要的一步,只有将数据存储起来,才能让数据更有价值
- 数据持久化的过程中,需要注意几个问题,第一个就是要检验数据是否合法,在数据库里面是否已经有该数据了, 第二点就是要频繁地跟内存和磁盘进行交互,因此需要选择合理的数据结构,最后要考虑的就是选择合适的存储介质
4. 潜在的问题
(1) 数据库怎么保证数据不丢失 (2) 数据库怎么处理多人同时修改的问题 (3) 为什么使用数据库,除了数据库还有哪些存储系统 (4) 数据库只能处理结构化数据吗
二、存储系统
Q: 什么是存储系统 A: 一个提供了读写、控制类接口,能够安全有效地把数据持久化的软件,就可以称为存储系统 考虑问题: 用户,内存,网络
存储系统的系统特点
- 作为后端软件的底座,性能敏感
- 存储系统代码简单又复杂
- 存储系统软件架构容易受硬件影响
存储器层级结构
- 从上到下,存取速度由快到慢,成本由高到低
数据怎么从应用到存储介质
- 缓存很重要,贯穿整个存储体系
- 拷贝是很昂贵的,应该减少
- 硬件设备需要有抽象统一的接入层
RAID技术
- 出现背景
- 单块大容量磁盘价格>多块小容量磁盘
- 单块写入性能<多块磁盘的并发写入性能
- 单块磁盘容错能力有限,不够安全
- RAID0
- 多块磁盘简单组合
- 数据条带化存储,提高磁盘带宽
- 没有额外容错
- 简单来说就是全部的块都用来存储数据,而不做数据备份
- RAID1
- 一块磁盘对应一块额外镜像盘
- 真实空间利用率为50%
- 容错能力强
- 每一份数据都有其备份
- RAID0+1
- 结合RAID0 和RAID1
- 真实空间利用率为50%
- 容错强,写入带宽好
- 在相同的组内使用RAID0, 然后对该组进行备份
三、数据库
1、关系型数据库
关系是什么
(1) 关系= 集合 = 任意元素组成的若干有序偶对,反应了事物之间的关系 (2) 关系代数 = 对关系进行运算的抽象查询语言 (3) SQL = 一种DSL = 方便人类阅读的关系代数表达形式
关系型数据库
(1) 关系型数据库是存储系统,但是在存储之外,有发展出其他能力,例如结构数据友好,支持事务,支持复杂查询语言
2、非关系型数据库
非关系型数据库
- 非关系型数据库也是存储系统,但是一般不要求严格的结构化
3. 数据库vs经典存储-结构化数据管理
- 数据库可以使用表来对数据进行抽象,如果使用经典的存储,就需要与文件、字节进行打交道
- 数据库支持事务,经典存储不支持事务 事务具有以下特性: A(atomicity): 事务内的操作要么全做,要么不做 C(consistency): 事务执行前后,数据状态一致 I(Isolation): 可以隔离多个并发事务,避免影响 D(Durabilitu) : 事务一旦提交成功,数据保证持久性
- 数据库支持复杂查询,而经典存储难以支持
总结
本节课首先介绍了数据从产生到持久化的几个主要阶段,从原始的存储系统到关系型数据库,再到非关系型数据库,这是一个循序渐进地过程,最后比较了数据库与经典存储的利弊。其中比较细节的地方就是RAID的介绍以及事务的特性,这些都是值得我们去探索的东西。