这是我参与「第五届青训营」伴学笔记创作活动的第 12 天。
-
数据产生:用户输入,产生数据,传输到服务器
-
为什么要持久化数据?存在内存里是没有记忆能力的,需要把必要的带有记忆的数据存在数据库
-
数据持久化流程:
- 校验数据合法性。注册操作,检查注册用户是否存在
- 修改内存。数据库作为软件,数据处理在内存中,用高效的数据结构组织数据,处理数据,形成准备持久化的数据
- 写入存储介质。以寿命和性能友好的方式写入硬件。
-
存储系统
-
定义:一个提供了读写、控制类接口,能够安全有效地把数据持久化的软件,涉及用户、存储介质、内存、网络等部分
-
系统特点:
- 作为后端软件的底座,性能敏感;
- 存储系统代码,IO读写代码逻辑简单,错误处理要复杂;
- 存储系统软件架构,容易受硬件影响;
-
硬件,存储器层级结构:
-
金字塔结构,塔尖代表特定的存储设备,容量极小,支持高性能访问;底层,容量大,性能慢
-
中间层兼顾持久化介质和内存介质特点的存储器,persistent memory
-
-
软件,数据从应用到存储介质的读写特点
- 缓存很重要,贯穿整个存储体系
- 拷贝很昂贵,应该尽量减少
- 硬件设备五花八门,需要有抽象统一的接入层
-
经典存储技术,RAID技术
- 背景:单块大容量磁盘的价格 > 多块小容量磁盘;单块磁盘的写入性能< 多块磁盘的并发写入性能;单块磁盘的容错能力有限,不够安全
- RAID 0:数据切割,分别并发写入多块磁盘,磁盘简单组合,数据条带化存储,提高磁盘带宽。但是没有额外的容错设计,数据写入只有一份
- RAID 1:一块磁盘对应一块额外镜像盘,真实空间利用率仅50%,容错能力强
- RAID 0+1:结合了RAID O 和RAID 1,真实空间利用率仅50%,容错能力强,写入带宽好
-
-
数据库
-
关系模型:
- 关系:集合,任意元素组成的若干有序偶对,反应了事务间的关系
- 关系代数:对关系做运算的抽象查询语言,交、并、笛卡尔积等
- SQL:一种DSL,方便人类阅读的关系代数表达式
-
事务:
- A(tomicity):事务内的操作要么全做,要么不做,
- C(onsistency):事务执行前后,数据状态是一致的,
- I(solation):可以隔离多个并发事务,避免影响,
- D(urability):事务一旦提交成功,数据保证持久性
-
关系型数据库
- 是存储系统,对结构化数据友好,支持事务,支持复杂查询语言
-
非关系数据库
- 是存储系统,一般不要求严格的结构化,半结构化数据友好,可能支持事务,可能支持复杂查询语言
-
数据库VS经典存储
- 结构化数据管理:适合使用关系型数据库存储;经典存储需要自行定义数据结构
- 事务能力:关系型数据库支持事务;经典存储需要开发者实现深度的代码逻辑才能支持事务特性
- 复杂查询能力:关系型数据库灵活、简洁;经典存储僵化、复杂
-
-
总结
学习了数据持久化流程,存储系统的定义和特点,数据库的关系模型和事务的ACID特性。