1. 数据的持久化
校验数据的合法性——>修改内存(数据结构)——>写入存储介质(寿命)
2.数据库&存储
2.1 存储系统
存储系统是指计算机中由存放程序和数据的各种存储设备、控制部件及管理信息调度的设备(硬件)和算法(软件)所组成的系统。
存储系统就是计算机存储程序和数据的系统
由各种存储设备和控制部件及管理信息调度的硬件和软件组成,具有存入和取出两大功能。
2.1.1存储系统特点
- 性能敏感
- 代码既简单又复杂
- 容易受硬件影响
2.1.2存储器层级结构
大容量的储存元件便宜,但运算速度慢
运算速度快的储存元件运算速度快,但价格高,存储内容小
2.1.3数据从应用到存储介质
缓存很重要,贯穿整个存储体系
拷贝很昂贵,应该尽量减少
硬件设备多样,要有抽象统一的接口
2.1.4 RAID技术
高性能+高性价比+高可靠性
RAID ( Redundant Array of Independent Disks )即独立磁盘冗余阵列,简称为「磁盘阵列」,其实就是用多个独立的磁盘组成在一起形成一个大的磁盘系统,从而实现比单块磁盘更好的存储性能和更高的可靠性。
背景:
- 单块大容量磁盘价格>多块小容量磁盘
- 单块磁盘的写入性能<多块磁盘的并发写入性能
- 单块磁盘的容错能力有限,不够安全
-
RAID0
将多块磁盘组合在一起形成一个大容量的存储。当我们要写数据的时候,会将数据分为N份,以独立的方式实现N块磁盘的读写
- 性能高:RAID0 的读写性能理论上是单块磁盘的N倍
- 安全性低:不提供数据校验或冗余备份,一旦某块磁盘损坏,数据无法恢复
-
RAID1
RAID1 是磁盘阵列中单位成本最高的一种方式
在往磁盘写数据的时候,将同一份数据无差别的写两份到磁盘,分别写到工作磁盘和镜像磁盘,实际空间使用率只有50%
- 性能低
- 安全性高
-
RAID 1+0 和 RAID 0+1
RAID 0+1 也称RAID10,是先创建2个独立的RAID1,再将这两个独立的RAID1组成一个RAID0
RAID 0+1 是先创建2个RAID0 再用这两个RAID0组建一个RAID1
两者均综合了RAID0和RAID1优缺点。
- 降低了RAID1的高安全性,弥补了RAID0的不足
- 降低了RAID0的高速和磁盘利用率,弥补了RAID1的不足
均最少需要4个磁盘组成,而且需要的磁盘数为4的倍数。磁盘有效容量是总容量的一半
2.2 数据库
2.2.1 关系型数据库
关系 = 集合 = 任意元素组成的若干有序偶对反应了事务间的关系
关系代数 = 对关系作运算的抽象查询语言
SQL(结构化查询语言Structured Query Language )
= 一种DSL(领域特定语言domain-specific language )
= 方便人类阅读的关系代数表达形式
关系型数据库时存储系统,但有其他能力:
- 对结构化数据友好
- 支持事务(ACID)
- 支持复杂查询语言(SQL)
2.2.2 非关系型数据库
非关系型数据库也是存储系统,但是一般不要求严格的结构化
- 半结构化数据友好
- 可能支持事务(ACID)
- 可能支持复杂查询语言(SQL)
2.3 数据库 VS 经典存储
2.3.1 结构化数据管理
关系型数据库:表形式
文件:自行定义结构体
2.3.2 事务能力
数据库ACID
数据库中:事务(Transaction)是访问和更新数据库的程序执行单元,事务中可能包含一个或多个sql语句,这些语句要么都执行,要么都不执行
ACID是衡量事务的四个特性:
原子性(Atomicity)事务内的操作要么全做,要么不做
- 一个事务是一个不可分割的工作单位,其中的操作要么都做,要么都不做
- 数据库中:如果事务中一个sql语句执行失败,则已执行的语句也必须回滚,数据库退回到事务前的状态
一致性(Consistency)事务执行前后,数据状态是一致的
- 一致性是指事务执行结束后,数据库的完整性约束没有被破坏,事务执行的前后都是合法的数据状态。
- 数据库的完整性约束包括但不限于:实体完整性(如行的主键存在且唯一)、列完整性(如字段的类型、大小、长度要符合要求)、外键约束、用户自定义完整性(如转账前后,两个账户余额的和应该不变)
隔离性(Isolation)可以隔离多个并发事务,避免影响
隔离性研究的是不同事务之间的相互影响。
隔离性是指,事务内部的操作与其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
通常使用锁机制来保证事务的隔离性 :
- 锁机制
- 脏读、不可重复读和幻读
持久性(Durability)事务—旦提交成功,数据保证持久性
- 持久性是指事务一旦提交,它对数据库的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
2.3.3 复杂查询能力
数据库:select
2.4 数据库使用方式
以SQL为例,要操作数据时,支持以下操作:要对数据定义做修改时,支持以下操作:
操作数据:
Insert
Update
Select
Delete
where子句
GroupBy
OrderBy
对数据定义进行修改:
Create user
Create database
Create table
Alter table
2.4.1 数据定义语言(DDL)
DDL全称是Data Definition Language
定义语言就是定义关系模式、删除关系、修改关系模式以及创建数据库中的各种对象
由
CREATE、ALTER、DROP和TRUNCATE四个语法组成
2.4.2 数据操纵语言(DML)
DML 全称是Data Manipulation Language
进行插入元组、删除元组、修改元组的操作
由
insert、update、delete语法组成
2.4.3 数据查询语言(DQL)
DQL 全称是Data Query Language
用来进行数据库中数据的查询
最常用的select语句
2.4.5 数据控制语言(DCL)
DCL 全称是Data Control Language
用来授权或回收访问数据库的某种特权,并控制数据库操纵事务发生的时间及效果,能够对数据库进行监视
常见的授权、取消授权、回滚、提交等操作