认识存储&数据库 | 青训营笔记

96 阅读5分钟

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

这里讲的主要是RDBMS(关系型数据库),RDBMS是目前使用最为广泛的数据库之一,同时也是整个信息化时代的基石。本节课程通过生活中常见的场景向大家介绍RDBMS的作用、发展历程等。

经典案例

从抖音红包雨抢了一个小目标hhhh

 update account_table set balance = balance - '小目标' where name = '抖音';
 update account_table set balance = balance + '小目标' where name = '兔老师';

事务ACID

  • ACID:

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

 BEGIN;
 update account_table set balance = balance - '小目标' where name = '抖音';
 update account_table set balance = balance + '小目标' where name = '兔老师';
 COMMIT;
  • 红包雨还遇见了别的问题:

    • 高并发(Concurrency)-> 高并发顶得住
    • 高可靠(High Reliability/Availability)-> 后台服务可靠,稳定

发展历史

前DBMS时代

  • 人工管理时代:结绳记事 -> 钱庄账本 -> 打孔机(效率太低)
  • 文件系统时代:磁盘驱动器(记事本)

DBMS时代

  • 1960s,传统的文件系统已经不能满足人们的需要,数据库管理系统(DBMS)应运而生。DBMS:按照某种数据模型来组织、存储和管理数据的仓库。所以通常按照数据模型的特点将传统数据库系统分成网状数据库、层次数据库和关系数据库三类。

image-20230127093835340

  • 网状模型:

image-20230127093926436

  • 层次模型:

image-20230127093957835

一对多,网状 -> 树状

  • 关系模型:

所有数据都是表!!!

一对一,一对多,多对多的关系,都可以用表来描述,方便处理很多昂!!!

  • 对比:

image-20230127094130686

SQL语言

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

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

image-20230127094315815

历史回顾

image-20230127094512670

关键技术

一条SQL的一生

image-20230127094657224

SQL引擎

Parser

解析器(Parser)一般分为:词法分析(Lexical analysis)、语法分析(Syntax analysis)、语义分析(Semantic analyzer)等步骤。

image-20230127094952098

Optimizer

Why optimizer?

  • 很多虽然有了Parser,知道了语义,但是实现有很多种。
  • optimizer就是帮助我们从中选一种好的昂!!!
  • Multiple choices:

image-20230127095315734

  • 实现:

基于规则的优化(RBO Rule Base Optimizer)

image-20230127095444959

基于代价的优化(CBO Cost Base Optimizer)

image-20230127095517616

现在用的很多都是基于代价的优化,例如考虑整体Time最少的方式,进行处理昂!

Executor

  • 火山模型:

image-20230127095906650

  • 向量化:

image-20230127100050054

  • 编译的执行:

image-20230127100200024

LLVM动态编译执行技术就是其中一种前沿技术昂!

存储引擎

InnoDB

image-20230127100400303

Buffer Pool

  • buffer pool结构:

image-20230127100826957

  • 管理空间:

image-20230127100854915

Page

image-20230127101130425

B+ Tree

image-20230127101210627

事务引擎

Atomicity & Undo Log

image-20230127101338726

Isolation & 锁

image-20230127101407165

MVCC的概念就在这里昂!!!

Isolation & MVCC

image-20230127101436107

Durability & Redo Log

image-20230127101638342

企业实践

春节红包雨

image-20230127102928229

大流量

Sharding

image-20230127103311885

流量突增

扩容

image-20230127104710296

代理连接池

image-20230127104752226

稳定性&可靠性

3AZ高可用

image-20230127104909925

3 Available Zone

不同的AZ之间,日志同步。

HA管理

image-20230127105029889

High Availability

Summary

image-20230127105108383

References:

  1. 编程语言排行榜:hellogithub.com/report/tiob…
  2. A Relational Model of Data for Large Shared Data Banks
  3. Readings in Database Systems(Fifth Edition)
  4. InnoDB架构官方文档:dev.mysql.com/doc/refman/…
  5. InnoDB中Buffer Pool官方文档:dev.mysql.com/doc/refman/…
  6. Why buffer pool is needed