RDBMS
经典场景
用户之间的转账场景。
假设有这样一个转账操作:
- 从账户A转出1亿。
- 从账户B转入1亿。
我们用SQL语句可表示为:
update account_table set balance = balance - '1 billion' where id = 'A';update account_table set balance = balance + '1 billion' where id = 'B';
在RDBMS中,转账操作可以形成一项事务,而事务需要符合ACID。
RDBMS还需要有高并发、高可靠和高可用的能力。
原子性 Atomicity
当账户A转出1亿后,服务器故障,从账户B转入1亿的操作未执行。
原子性就是保证事务中的操作要么同时执行,要么同时不执行,不可能出现中间状态。
一致性 Consistency
如果账户A中只有0.5亿,但是转出1亿的操作仍然成功了。
一致性就是保证每个操作都是合法的,数据库信息从一个有效的状态转化为另一个有效的状态。
隔离性 Isolation
如果账户B又转入了1亿,但是两个转账同时进行,并且都是从账户B为0的时候进行转账,结果是账户B中只有1亿的余额。
隔离性就是保证两个并发事务之间不会相互影响,表现出串行处理。
持久性 Durability
当转账操作成功后,但是没有写入磁盘,在这个时候服务器出现故障,那么账户信息就会还原,转账操作没有生效。
持久性就是保证每次操作的结果都能被持久性的保存下来,甚至在存储介质故障时具有恢复的能力。
高并发
当访问量非常大的时候,但是服务的的处理能力很弱,就会让用户等待很长的时间。
高可靠
数据库需要在任何时候都可以使用,需要保证在高负载下也不会崩溃失效。
发展历史
文件系统
使用文件存储所有需要的数据,并且这些文件可以存放在多种存储介质上。
使用文件系统管理数据有以下缺点:
- 数据出现大量冗余
- 数据可能出现不一致,无法保证完整性和一致性
- 对每个文件都可以需要编写一个对应的应用
- 数据和数据之间不互通,交换困难
网状模型
基于网状模型建立数据之间的联系,创造出了网状数据库。
网状模型是一张图,每个子节点可以有多个父节点,每个父节点可以有多个子节点。
层次模型
基于层次模型建立数据之间的联系,创造出了层次数据库。
层次模型是一棵树,每个父节点可以有多个子节点,但是每个子节点只能有一个父节点。
关系模型
关系模型将数据之间的联系构成一张二维表,并且创造了关系代数来进行关系运算。
在关系模型的基础上创造出关系型数据库。
模型对比
| 网状 | 层次 | 关系 | |
|---|---|---|---|
| 优势 | 直接描述世界、存取效率高 | 结构简单、查询效率高 | 表示多对多关系方便、屏蔽底层细节 |
| 劣势 | 结构复杂、使用困难 | 无法表示多对多关系、遍历效率低下、使用困难 | 关联查询效率低、关系必须规范化 |