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

75 阅读4分钟

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

本篇文章将主要围绕RDBMS的发展历史进程,用到的核心关键技术以及企业实践中的一些相关知识进行分析和总结。

存储系统:块存储、对象存储、key-value存储

数据库系统:关系型数据库、非关系型数据库

分布式架构:数据分布策略、数据复制协议、分布式事务算法

1.RDBMS发展进程

数据模型的优势与劣势的对比:

网状模型

优势:能直接描述现实世界、存取效率较高

劣势:结构复杂、用户不易使用、访问程序设计复杂

层次模型

优势:结构简单、查询效率高、可以提供较好的完整性支持

劣势:无表示M:N的关系、插入、删除限制多、遍历子节点必须经过父节点、访问程序设计复杂

关系模型

优势:实体及实体间的联系都通过二维表结构表示、可以方便的表示M:N关系、数据访问路径对用户透明

劣势:关联查询效率不够高、关系必须规范化

SQL语言的特点:语法风格接近自然语言、高度非过程化、面向集合的操作方式、语言简洁,简单易学

2.RDBMS关键技术

一条SQL包括三个引擎:SQL引擎、事务引擎、存储引擎

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

  • 数据库索引:是数据库管理系统中辅助数据结构,以协助快速查询、更新数据库表中的数据。目前数据库中最常用的索引是通过B+树实现的

  • 火山模型:每个Operator调用Next操作,访问下层Operator,获得下层Operator返回的一行数据,经过计算后,将这行数据返回给上层

优点:每个算子独立抽象实现,相互之间没有耦合,逻辑结构简单

缺点:每计算一条数据有多次函数调用开销,导致CPU效率不高

  • 向量化:每个Operator每次操作计算的不再是一行数据,而是一批数据(Batch N行数据),计算完成后向上层算子返回一个Batch

优点:函数调用次数降低为1/N;CPU cache命中率更高;可以利用CPU提供的SIMD机制

编译执行:将所有的操作封装在一个函数里面,函数调用的代价可大幅度下降

存储引擎中的相关命令语句:

delete_mask:标识此条数据是否被删除

next_record:下一条数据的位置

record_type:表示当前记录的类型

页面内:

页目录中使用二分法快速定位到对应的槽,然后再遍历该槽对应分组中的记录即可快速找到指定的记录

从根到叶:

中间点存储

点查:select * from table where id = 2000;

范围查询:select * from table where id > 2000;

事务引擎中的Undo Log是逻辑日志,记录的是数据的增量变化,利用Undo Log可以进行事务回滚,从而保证事务的原子性。同时也实现了多版本并发控制(MVCC),解决读写冲突和一致性读的问题。

MVCC的意义:读写互不阻塞;降低死锁概率;实现一致性读

Undo Log在MVCC的作用:

每个事务有一个单增的事务ID;

数据页的行记录中包含了DB_ROW_ID,DB_TRX_ID,DB_ROLL_PTR;

DB_ROLL_PTR将数据行的所有快照记录都通过链表的结构串联了起来

3.RDBMS企业实践中应用

  • 大流量-shaiding

问题背景:单节点写容易成为瓶颈、单机数据容量上限

解决方案:业务数据进行水平拆分、代理层进行分片路由

实施效果:数据库写入性能线性扩展、数据库容量线性扩展

  • 流量突增-扩容

问题背景:活动流量上涨、集群性能不能满足

解决方案:扩容DB物理节点数量、利用影子表进行压测

实施效果:数据库集群提供更高的吞吐、保证集群可以承担预期流量

  • 流量突增-代理连接词

问题背景:突增流量导致大量建联、大量建联导致负载变大、延时上升

解决方案:业务侧预热连接词、代理侧预热连接词、代理侧支持连接队列

实施效果:避免DB被突增流量打死、避免代理和DB被大量建联打死

总结

本篇文章主要从RDBMS的三个方面进行总结和分析,主要记录了一些相关的概念和定理。

引用

本篇文章的内容主要来自于字节内部课程。