这是我参与「第五届青训营 」笔记创作活动的第 15 天
存储与数据库系统
经典案例:数据是如何在系统中流动的?
数据的产生:
某一天,小明下载了一个新的APP,并填写注册表格进行了注册,按下注册按钮。数据就这样产生了,并在几十毫秒的时间内就到达了软件公司的服务器中。
数据的流动: 手机->后端服务器(内存)->数据库(持久化) -> [其他系统]
数据如何持久化?
- 校验数据合法性(例如用户名是否已经存在)
- 修改内存(在内存中准备好数据结构)
- 写入存储介质(按照寿命/性能友好的方式写入存储介质)
存在哪些潜在的问题呢?
- 数据库如何保证数据不丢失?
- 数据库如何处理多人同时修改的问题?
- 除了数据库还有哪些存储系统?
- 数据库只能处理结构化数据吗?
- 有哪些操作数据库的方式?
存储系统
-
什么是存储系统?
:提供读写,控制接口,能有效安全地把数据持久化的软件就可以称为存储系统
-
存储系统有哪些特点?
-
性能敏感
-
受硬件影响
-
代码必须简单&复杂
- IO路径上必须简单以保证性能
- 非IO路径上需要保证异常安全性等等
-
-
存储系统的层次结构如何?
- Hierarchy:Cache -> Memory -> HDD -> Tape
- 存储速度越来越慢,速度和单位价格越来越低
RAID技术
单机存储如何同时做到:高性能、高性价比、高可靠性?
RAID技术出现时的一些背景:
- 单块大容量磁盘价格大于多块小容量磁盘
- 单块磁盘写入性能小于多块磁盘并发写入性能
- 单块磁盘容错能力有限,不够安全
RAID0 : 多块磁盘简单组合,数据条带化存储,写入性能加倍但容错性没有保证
RAID1:一块磁盘对应一块镜像,容错能力强,但是空间利用率低也没有性能提升
结合上述两种RAID方式就可以得到高性能、高性价比、高可靠的磁盘系统了。
数据库
数据库系统可以分为关系型数据库和非关系型数据库。
-
什么是关系?
描述两个对象之间的关系
-
关系代数:
对关系做运算的抽象查询语言
-
SQL
一种DSL,可读的关系代数表达形式
关系型数据库就是一种存储系统,但是在存储之外还有其他能力:
- 结构化数据有好
- 支持事务(ACID)
- 支持复杂查询语言(如SQL)