1.经典案例
数据的产生
小明同学注册了APP中的新账号,数据产生了,向APP后端服务器飞奔而去
数据的流动
为什么要持久化数据:如果不持久化,服务是没有记忆和保存能力的(用户每次登录都要重新注册)
数据的持久化
数据库存储软件不仅追求性能和稳定,还要注意硬件寿命,以对硬件友好的方式写入数据
2.存储&数据库简介
2.1 存储系统
一个提供了读写、控制类接口,能够安全有效地把数据持久化的软件,就可以称为存储系统
存储系统特点
性能敏感:现代大型后端系统架构中涉及大量的,并发的,频繁的对存储系统的操作,需要存储系统具有超高新能
存储系统代码,既“简单”又“复杂”:IO路径(读写路径)代码要简单,避免性能受影响;非IO路径和IO路径错误处理(异常处理)代码需要考虑各种异常情况,代码需要比较复杂才能处理各类异常
系统架构容易受硬件影响:软件需要顺应硬件变革
存储器层级结构
“塔尖”存储器容量极小,超高性能访问;“底部”存储器容量大,读写慢,访问方式非常不友好
数据怎么从应用到存储介质
缓存很重要,贯穿整个存储体系:存储介质实际访问方式与软件希望的方式未必相同;不同层的软件之间的访问方式不相同;缓存可以在跨软件层的地方以对软件层或硬件层友好的方式与其他层级软件或硬件进行交互
拷贝很昂贵,应尽量减少:拷贝占用CPU,影响性能
需要有抽象统一的接入层与不同硬件交互
RAID技术
单机存储系统如何高性能,高性价比,高可靠:RAID (Redundant Array of Independent Disks)
RAID 0:多块磁盘简单组合成大容量存储,数据分成N份,在N块磁盘上独立地读写;性能高,可靠性不高
RAID 1:将同样的数据同时写入到工作磁盘和镜像磁盘;可靠性高,性能差
RAID 0 + 1:使用RAID 1方法的工作磁盘和镜像磁盘中的数据都用RAID 0方法存储
2.2 数据库
关系是什么?
关系 = 集合 = 任意元素组成的若干有序偶对
关系代数:对关系作运算的抽象查询语言(交,并,笛卡尔积……)
SQL = 一种DSL(领域特定语言)= 方便人类阅读的关系代数表达形式
关系型数据库特点
关系型数据库是存储系统,但在存储之外,又发展出其他能力:
1.结构化数据友好
2.支持事务
3.支持复杂查询语言
非关系型数据库特点
非关系型数据库也是存储系统,但是一般不要求严格的结构化:
1.半结构化数据友好
2.可能支持事务
3.可能支持复杂语言
2.3 数据库 vs 经典存储
结构化数据管理
关系型数据库:写入关系型数据库,以表形式管理
经典存储:写入文件,自行定义管理结构(繁琐复杂,需要自行计算移位)
事务能力
凸显出数据库支持“事务”的优越性
事务具有:ACID
Atomicity 原子性:事务内的操作要么全做,要么不做
Consistency 一致性:事务执行前后,数据状态保持一致
Isolation 隔离性:隔离多个并发事务,避免互相影响
Durability 持久性:事务提交成功后,事务对数据的更改是持久的
复杂查询能力
数据库:复杂查询时灵活,简洁
经典存储:复杂查询时僵化,复杂
2.4 数据库使用方式
Domian Specific Language(领域特定语言):SQL
SQL支持以下数据操作:Insert插入,Update更新,Select选择,Delete删除,Where子句(辅助查询,帮助筛选数据),Groupby分组,Orderby排序等
SQL支持以下修改数据定义的操作:Create user创建新用户,Create database创建新数据库,Create table创建新表,Alter table更改表等
总结
在如今的软件中,数据存储系统是关键且核心的一部分,数据库则是对于大多数软件而言最高性能和最可靠的存储系统。本篇文章仅仅是对课堂内容和数据库知识的基础总结,对于渴望进一步了解数据库的朋友,可以阅读掘金文章: juejin.cn/post/691451… juejin.cn/post/697901…
对于初学者,推荐使用MySQL作为学习数据库和SQL语言的工具,第二篇掘金文章有针对MySQL 的教学。