深入理解RDBMS | 青训营笔记

76 阅读2分钟

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

经典案例

一场红包雨

每一年的春节,抖音都会下一场温暖人心的红包雨

  • 从抖音的账户上扣除一个小目标
  • 给羊老师的账户加上一个小目标

image.png

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):多个事务并发访问时,事务之间是隔离的,一个事务不应该影响其他事务运行结果。
  • 持久性(Duraability):在事务完成以后,该事务所对数据库所作的更改使得持久的保存在数据库之中,并不会被回滚。

红包雨与ACID

Case 1:抖音的账户上扣了一个亿之后,假设服务器挂了,还没来得及给羊老师账户上加一个亿。

image.png

Case 2:假设抖音的账户上只有0.5个亿,但是扣减1个亿的操作成功了。

image.png

Case 3:羊老师从抖音抢了一个亿红包,又从头条抢了一个亿,两个转账同时进行,假设他们都以为是从零开始更新羊老师的账户余额,羊老师最后得到一个亿。

image.png

Case 4:抖音的账户上扣了一个亿,然后羊老师账户上加一个小目标,但都没有写到磁盘上。这个时候,如果服务器挂了。

image.png

红包雨与高并发

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

红包雨与高可靠

Case 6:假设除夕晚上大家正在愉快的从抖音身上“薅羊毛”,这时候服务器挂了,程序员花了一个小时,终于修好了,这时候发现难忘今宵都唱完了,宕机新闻会上热搜。高可靠,高可用(High Reliability)

发展历程

关键技术

一条SQL的一生

SQL引擎 - Parser

SQL引擎 - Optimizer

SQL引擎 - Executor

存储引擎 - InnoDB

存储引擎 - Buffer Pool

存储引擎 - Page

存储引擎 - B+ Tree

事务引擎 - Atomicity与Undo Log