RDBMS基本情况 | 青训营笔记

77 阅读4分钟

这是我参与「第五届青训营」伴学笔记创作活动的第 16 天

前情回顾

存储系统

  • 块存储
  • 文件存储
  • 对象存储
  • key-value存储

数据库系统

  • 关系型数据库、非关系型数据库(MongoDB)

分布式架构

  • 数据分布策略、数据复制协议、分布式事务算法

经典案例

春节抖音红包雨

在领红包的过程中涉及到以下操作:

  • 从抖音账户上扣除金额
  • 用户账户上添加金额
update account_table set balance = balance - '小目标' where name = '抖音'
update account_table set balance = balance + '小目标' where name = '用户'

案例中可以了解到,生活中的一些场景是会用到RDBMS的

RDBMS事务ACID

事务(Transaction) :是由一组SQL语句组成的一个程序执行单元(Unit),它需要满足ACID特性

BEGIN
update account_table set balance = balance - '小目标' where name = '抖音'
update account_table set balance = balance + '小目标' where name = '用户'
COMMIT;

ACID

  • 原子性(Atomicity):事务是一个不可再分割的工作单元 ,事务中的操作要么都发生,要么都不发生
  • 一致性(Consistency):数据库事务不能破坏关系数据的完整性及业务逻辑上的一致性
  • 隔离性(Isolation):多个事务并发访问时,事务之间是隔离的,一个事务不应该影响其它事务运行效果。
  • 持久性(Durability):在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚或丢失。

原子性A

事务中的操作要么同时发生,要么同时不发生

例如在红包雨活动中,如果只在抖音账户中扣除了金额,而用户的账户中没有添加金额,那么对抖音来说是血亏的,而用户也是不赚的,对双方都没有好处

一致性C

如果没有一致性

那么假设抖音账户还剩下0.5个亿,结果扣除了1个亿,还剩下-0.5个亿,那么必将导致严重后果

一致性是指每个操作都必须是合法的,账户信息必须从一个有效的状态变为另一个有效的状态

ACID中一致性的概念更多指的是业务逻辑的合法性

隔离性I

当用户在抖音领导红包后,同时在头条领到了红包

当抖音和头条的账户同时扣除1个亿的金额后

抖音和头条最初检测到用户账户都是0,同时更新余额为1个亿,最后账户余额就是1个亿

抢了两个红包结果显示一个红包的金额,这显然是不对的

这就是隔离性的问题,两个事务之间是由互相影响的因素在的

这里的隔离性是指:两个账户在对同一个账户并发进行操作时,应该是互不影响的,表现得像是串行操作

持久性

当用户领到红包后,服务器宕机了,导致金额又回到了应该扣除的账户中

这就是持久性的概念

持久性是指操作更新成功之后,更新的结果应该永久性的保留下来,不会因为宕机等问题而丢失。

高并发Concurrency

Case 5 :全国14亿人,假设有10亿人同时开抢红包,若每秒处理一个请求,那需要31年才能完成。春节完了,抖音可能也被大家嫌弃了…
但是若

但是若每秒能处理1000W请求,那么只需要1min40s即可处理完所有的请求

高可靠High Reliability/Availability

Case 6 :假设除夕晚上大家正在愉快的从抖音身上“薅羊毛”,这时候服务器挂了,程序员花了一个小时,头发都掉光了,终于修好了。这时候发现李谷一老师《难忘今宵》都唱完了。"抖音宕机”秒上热搜
这就说明,一些关键实践节点要提供的服务必须是稳定可靠的,否则会给用户造成不好的体验和印象