MySQL-深入理解RDBMS | 青训营笔记

112 阅读6分钟

MySQL-深入理解RDBMS | 青训营笔记

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

今天主要对MySQL-深入理解RDBMS进行学习。

一、本堂课重点内容:

本次课程讲了以下几个方面:

  1. 经典案例

  2. 发展历史

  3. 关键技术

  4. 企业实践

二、详细知识点介绍:

1.经典案例

就抖音App的新年红包雨活动案例而言,在每次用户操作获得红包的时候,系统都会从抖音的账户上扣除相应金额,给羊老师的账户加上相应金额。其涉及的SQL语句如下:

UPDATE account_table SET balance = balance - ‘小目标’WHERE name =‘抖音';
UPDATE account_table SET balance = balance + ‘小目标’ WHERE name =‘羊老师’;

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

  • 原子性(Atomicity):事务是一个不可再分割的工作单元,事务中的操作要么都发生,要么都不发生。在案例中抖音的账户上扣了一个亿之后,假设服务器挂了,还没来得及给羊老师账户上加一个亿。这个时候就需要使用到原子性来确保两个操作要么同时成功,要么同时失败,不存在中间状态。
  • 一致性(Consistency):数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。在案例中,假设抖音的账户上只有0.5个亿,但是扣减1个亿的操作成功了,这个时候就会产生不合法的扣费。我们就需要使用一致性来保证每个操作都必须是合法的,账户信息应该从一个有效的状态变为另一个有效的状态。
  • 隔离性(lsolation):多个事务并发访问时,事务之间是隔离的,一个事务不应该影响其它事务运行效果。案例中假设羊老师从抖音抢了一个亿红包,又从头条抢了一个亿,两个转账同时进行,假设他们都以为是从零开始更新羊老师的账户余额,羊老师最后得到一个亿。这个时候就需要使用到隔离性来保障两个操作在对同一个账户并发进行操作时,应该是相互不影响,表现的像是串行操作。
  • 持久性(Durability):在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。案例中假设抖音的账户上扣了一个亿,然后羊老师账户上加一个小目标,但都还没写到磁盘上。这个时候,如果服务器挂了就会导致金额没有真正加到账户上。这时我们就需要使用持久性来确保操作更新成功之后,更新的结果应该永久性的保留下来,不会因为宕机等问题而丢失。

2.发展历史

在计算机还没有诞生时,使用人工的方式对数据进行记录和管理。随着1950s,现代计算机的雏形基本出现和技术的不断发展,1956年IBM发布了第一个的磁盘驱动器--Model 305 RAMAC,从此数据存储进入磁盘时代。在这个阶段,数据管理直接通过文件系统来实现。1960s,传统的文件系统已经不能满足人们的需要,数据库管理系统(DBMS)应运而生。DBMS:按照某种数据模型来组织、存储和管理数据的仓库。所以通常按照数据模型的特点将传统数据库系统分成网状数据库、层次数据库和关系数据库三类。 image.png

image.png SQL语言: 1974年IBM的Ray Boyce和Don Chamberlin将Codd关系数据库的12条准则的数学定义以简单的关键字语法表现出来,里程碑式地提出了SQL(Structured Query Language)语言。

  • 语法风格接近自然语言
  • 高度非过程化
  • 面向集合的操作方式
  • 语言简洁,易学易用

3.关键技术

3.1 SQL从产生到结束的全过程

image.png

3.2 SQL引擎

解析器(Parser)一般分为词法分析(Lexical analysis)、语法分析(Syntax analysis)、语义分析(Semantic analyzer)等步骤。如下图所示: image.png 同时还需要有优化器(Optimizer)以及执行器(Executor)

3.3 存储引擎

存储引擎的整体架构图如下图: image.png 其中涉及了Buffer Pool、Page、B+树等技术。

3.4 事物引擎

事务引擎就是主要围绕着ACID来进行设计的,可以使用Undo Log是逻辑日志,记录的是数据的增量变化。利用Undo Log可以进行事务回滚,从而保证事务的原子性。同时也实现了多版本并发控制(MVCC) ,解决读写冲突和一致性读的问题。使用锁来确保隔离性,此外还可以使用MVCC来保证隔离性。

4.企业实践

我们以一个春节红包雨的挑战作为案例。 活动统计:

  • 共计发放红包20亿元
  • 总计发放卡券24亿张
  • 拜年红包补贴12.9亿 流量统计
  • 活动钱包:400w/s
  • 发红包:300w/s
  • 发奖券:400w/s 设计到流量大流量突增稳定性三大挑战。针对大流量,我们可以考虑将业务数据进行水平拆分、代理层进行分片路由。对于流量突增,我们需要对其进行扩容,扩容DB物理节点数量、利用影子表进行压测。而在稳定性方面,我们可以考虑使用代理连接池,业务侧预热连接池、代理侧预热连接池、代理侧支持连接队列。

三、课后个人总结:

通过对MySQL-深入理解RDBMS的学习,学习到了我们对数据进行记录和管理的重要性。同时数据在我们生活中是密不可分的一部分,随着技术的不断发展,我们对数据的管理从人工已经发展成为计算机进行管理与记录。RDBMS的产生解决了许多数据管理的问题,使得我们对数据进行管理的难度大大降低,管理效率也得到的很大的提升。总而言之,RDBMS的出现,大大推动了我们对数据管理的进步。