深入浅出 RDBMS | 豆包MarsCode AI刷题

82 阅读2分钟

经典案例

红包雨

image.png

RDBMS 和 ACID

image.png

事务的四大特性 举例说明一下,用一个常用的“A账户向B账号汇钱”的例子来说明如何通过数据库事务保证数据的准确性和完整性。熟悉关系型数据库事务的都知道从帐号A到帐号B需要6个操作:

  1. 从A账号中把余额读出来(500)。
  2. 对A账号做减法操作(500-100)。
  3. 把结果写回A账号中(400)。
  4. 从B账号中把余额读出来(500)。
  5. 对B账号做加法操作(500+100)。
  6. 把结果写回B账号中(600)。

原子性

保证1-6所有过程要么都执行,要么都不执行。一旦在执行某一步骤的过程中发生问题,就需要执行回滚操作。 假如执行到第五步的时候,B账户突然不可用(比如被注销),那么之前的所有操作都应该回滚到执行事务之前的状态。

image.png

一致性

在转账之前,A和B的账户中共有500+500=1000元钱。在转账之后,A和B的账户中共有400+600=1000元。也就是说,数据的状态在执行该事务操作之后从一个状态改变到了另外一个状态。同时一致性还能保证账户余额不会变成负数等。

image.png

隔离性

在A向B转账的整个过程中,只要事务还没有提交(commit),查询A账户和B账户的时候,两个账户里面的钱的数量都不会有变化。 如果在A给B转账的同时,有另外一个事务执行了C给B转账的操作,那么当两个事务都结束的时候,B账户里面的钱应该是A转给B的钱加上C转给B的钱再加上自己原有的钱。

image.png

持久性

一旦转账成功(事务提交),两个账户的里面的钱就会真的发生变化(会把数据写入数据库做持久化保存)!

image.png

高并发

image.png

高可靠

image.png

结束

image.png

关键技术

一条 SQL 的一生

image.png

SQL 引擎——解析器

解析器一般分为词法分析、语法分析、语义分析等步骤。

image.png

SQL 引擎——优化器

image.png

  • 基于规则的优化

image.png

  • 基于代价的优化

image.png

SQL 引擎——执行器

image.png

向量化

image.png

编译

image.png

存储引擎——InnoDB

image.png

存储引擎——BufferPool

image.png

image.png

存储引擎——Page

image.png

事务引擎——Atomicity与undo log

image.png

事务引擎——isolation 与锁

image.png

事务引擎——isolation 与 MVCC

image.png

事务引擎—— dirablity 与 redo log

image.png

企业实践

红包雨挑战

image.png

大流量——sharding

image.png

流量突增——扩容

image.png

流量突增——代理连接池

image.png

3az高可用

image.png

ha 管理

image.png