1 经典应用案例
1.1 数据流动
- 注册数据
- 到达后端服务器
- 数据库系统(此时数据持久化,可以保证数据不会被丢掉)
- 可能去其他存储系统/存储器
1.2 数据持久化
对于数据持久化,我们需要进行的是:
- 校验数据的合法性(例如校验用户是否存在)
- 修改内存(用高效数据结构将数据组织起来)
- 写入存储介质
1.3 潜在的问题
虽然我们将大致的框架讲述了一下,但是实现的细节上还有很多的问题,例如:
- 数据库怎么保证数据不丢
- 数据库怎么处理多人同时修改的问题
- 为什么用数据库,除了数据库还有别的存储系统吗
- 数据库只能处理结构化数据吗
- 有哪些操作数据库的方式,要什么编程语言
接下来就是后端比较核心的存储系统
2 存储&数据库简介
2.1 存储系统 - 系统概览
- 存储系统的相关概念(非官方,自行理解)
- 提供读写、控制类接口,能够安全的把数据持久化的软件
- 存储系统的相关要素
- 用户
- 存储介质
- 内存
- 网络编程(应对超大容量海量存储的场景)
2.2 存储系统 - 系统特点
- 作为后端软件的底座,要面对大量并发的事务,对性能及其敏感
- 代码既简单又复杂
- 存储系统硬件架构容易受软件影响
2.3 存储系统 - 存储器层级结构
再借用一张图片
由此可以看出来我们的存储器结构凸显出两个要点:
- cache、buffer等体现了缓存很重要,贯穿存储体系,帮助使用硬件友好的方式去和硬件打交道
- 拷贝操作尽量减少
2.4 存储系统 - RAID技术
- 目标
- 高性能、高性价比、高可靠
- Redundant Array of Independent Disks
上述的目标也同样是RAID的含义,而它的出现背景有以下几个因素制约:
- 单块磁盘价格大于多块小磁盘
- 单块磁盘的写入性能小于多块磁盘的并发写入性能
- 单块磁盘的容错能力有限,不安全
那么数据库和存储系统有什么区别呢,应用场景不同那么必定是有各自的优劣之分
2.5 数据库 - 概览
分为关系型数据库、非关系型数据库。
而这里的“关系”我们理解为反映事物之间的关系,而关系代数理解为对关系作运算的抽象查询语言,SQL为一种DSL也就是方便人类阅读的关系代数表达式
2.6 关系型数据库和非关系数据库
- 关系型数据库特点
- 结构化数据友好
- 支持事务(ACID)
- 支持复杂查询语言(SQL)
- 非关系型数据库特点
- 半结构化数据友好
- 可能支持事务(ACID)
- 可能支持复杂查询语言(SQL)
而关系型数据库可以以表的形式来管理
经典存储则使用的是自行定义的管理结构,读取修改困难,出现错误也不方便进行排查
2.7 数据库 - 事务能力
数据库的优点还在于他们有一定的事务能力,而事务具有的特性有:
- A,原子性,要么全做,要么不做
- C,事务执行前后,数据状态是一致的
- I,可以隔离多个并发事务,避免影响
- D,持久性,事务一旦提交,数据保证持久性
具体的体现在于转账,也就是:
- 要么转账成功,要么失败
- 多个转账互不影响
- 转账提交成功,就是持久性的
数据库还具有的另一个优势就是支持复杂查询能力,通过SQL语句的查询方式比传统的遍历加条件判断的方式更加灵活简洁
对于SQL的使用方式,在业务场景常用的有以下几类,分为操作数据和修改数据
对于存储系统的基本认识和数据库的基本认识以及操作以上做了一个简单的介绍,还需要后续通过编写demo或者实际业务应用场景来感受各自的优劣。