一、经典案例
1.数据的产生
手机上产生的用户注册数据 -> 后端服务器 -> 数据库其他系统)
2.数据的持久化
- 校验数据的合法性
- 修改内存
- 写入存储介质
3.潜在的问题
- 数据库怎么保证数据不丢?
- 数据库怎么处理多人同时修改的问题?
- 为什么用数据库,除了数据库还能存到别的存储系统吗?
- 数据库只能处理结构化数据吗?
- 有哪些操作数据库的方式,要用什么编程语言?
二、存储&数据库简介
1.什么是存储系统?
一个提供了读写、控制类接口,能够拿全有效地把数据持久化的软件,就可以称为存储系统
2.系统特点:
- 作为后端软件底座,性能敏感
- 存储系统代码,既“简单”又“复杂“
- 存储系统软件,容易受硬件影响
3.存储器层级结构
- 第一层:通用寄存器堆
- 第二层:指令与数据缓冲栈
- 第三层:高速缓冲存储器
- 第四层:主储存器(DRAM)
- 第五层:联机外部储存器(硬磁盘机)
- 第六层:脱机外部储存器(磁带、光盘存储器等)
图片来源于百度百科
4.数据怎么从应用到存储介质?
- 缓存很重要,贯穿整个存储体系
- 拷贝很昂贵,应该尽量减少
- 硬件设备五花八门,需要有抽象统一的接入层
5.RAID技术
(1)单机存储系统怎么做到高性能/高性价比/高可靠性?
- Redundant Array of Inexpensive Disk(RAID)
- RAID(独立磁盘冗余阵列)是把相同的数据存储在多个硬盘的不同的地方的方法。
- 通过把数据放在多个硬盘上,输入输出操作能以平衡的方式交叠,改良性能。因为多个硬盘增加了平均故障间隔时间(MTBF),储存冗余数据也增加了容错。(资料来源于百度百科)
(2)RAID出现的背景:
- 单块大容量磁盘的价格>多块小容量磁盘
- 单块磁盘的写入性能<多块磁盘的并发写入性能
- 单块磁盘的容错能力有限,不够安全
(3)RAID的分类
RAID 0
- 多块磁盘简单组合
- 数据条带存储,提高磁盘带宽
- 没有额外的容错设计
RAID1
- 一块磁盘对应一款额外镜像盘
- 真是空间利用率仅50%
- 容错能力强
RAID 0+1
- 结合了RAID0 和RAID1
- 真实空间利用率仅50%
- 容错能力强,写入带宽好
6.难道数据库和存储系统不一样嘛?
存储系统和数据库系统是两个不同的概念。
数据库可以分为关系型数据库和非关系型数据库。
存储系统和数据库系统之间的区别在于,存储系统是用于存储数据的硬件和软件系统,而数据库系统是用于组织,存储和管理数据的软件系统。
7.关系又是什么?
- 1970年提出关系模型
- 关系=集=任意元素组成的若干有序偶对反应了事物间的关系
- 关系代数=对关系做运算的抽象查询语言
- SQL=一种DSL=方便人类阅读的关系代数表达形式
8.关系型数据库
关系型数据库就是存储系统,但是在存储之外,又发展出其他能力
- 结构化数据友好
- 支持事务ACID
- 支持复杂查询语言
9.非关系型数据库
非关系型数据库也是存储系统,但是一般不要求严格的结构化
- 半结构化数据友好
- 可能支持事务ACID
- 可能支持复杂查询语言
10.数据库VS经典存储——结构化数据管理
一条用户注册数据
- -> 写入关系型数据库以表形式管理
- -> 写入文件,自行定义,管理结构(定义结构体之类)
11.数据库VS经典存储——事务能力
凸显数据库支持事务的优越性
事务(ACID)具有:
- A事务内的操作要么全做,要么不做
- C事务执行前后,数据状态是一致的 (示例:微信转账的总金额不发生变化,A向B转账,A微信中总金额为1000元,B微信中金额为0元,A转账B500元,此时A微信中总金额为500元,B微信中总金额为500元,转账前后AB两人微信总金额不发生变化,体现了数据一致性。)
- I可以隔离多个并发事务,避免影响
- D事务一旦提交成功,数据保证持久性
12.数据库VS经典存储——复杂查询能力
写入数据后想做很复杂的查询怎么办?
->关系型数据库使用查询语句轻松应对
13.数据库使用方式
Everything is Domain Specific Language
增删改查
- Insert
- Update
- Select
- Delete
- Where子句
- GroupBy
- OrderBy