这是我参与「第五届青训营 」伴学笔记创作活动的第 14 天
经典案例
一场红包雨
每一年的春节,抖音都会下一场温暖人心的红包雨
- 从抖音的账户上扣除一个小目标
- 给羊老师的账户加上一个小目标

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:抖音的账户上扣了一个亿之后,假设服务器挂了,还没来得及给羊老师账户上加一个亿。

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

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

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

红包雨与高并发
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