首页 » Web前端 » php和mysql框图技巧_后端轨范员必备Mysql数据库相关流程图事理图

php和mysql框图技巧_后端轨范员必备Mysql数据库相关流程图事理图

访客 2024-12-08 0

扫一扫用手机浏览

文章目录 [+]

作者:Jay_huaxiao

序言

整理了一些Mysql数据库干系流程图/事理图,做一下条记,大家一起学习。

php和mysql框图技巧_后端轨范员必备Mysql数据库相关流程图事理图

1.mysql主从复制事理图

php和mysql框图技巧_后端轨范员必备Mysql数据库相关流程图事理图
(图片来自网络侵删)

mysql主从复制事理是大厂后真个高频口试题,理解mysql主从复制事理非常有必要。

主从复制事理,简言之,就三步曲,如下:

主数据库有个bin-log二进制文件,记录了所有增编削Sql语句。
(binlog线程)从数据库把主数据库的bin-log文件的sql语句复制过来。
(io线程)从数据库的relay-log重做日志文件中再实行一次这些sql语句。
(Sql实行线程)

如下图所示:

上图主从复制分了五个步骤进行:

步骤一:主库的更新事宜(update、insert、delete)被写到binlog

步骤二:从库发起连接,连接到主库。

步骤三:此时主库创建一个binlog dump thread,把binlog的内容发送到从库。

步骤四:从库启动之后,创建一个I/O线程,读取主库传过来的binlog内容并写入到relay log

步骤五:还会创建一个SQL线程,从relay log里面读取内容,从Exec_Master_Log_Pos位置开始实行读取到的更新事宜,将更新内容写入到slave的db

2.Mysql逻辑架构图

如果能在脑海中构建出MySql各组件之间如何协同事情的架构图,就会有助于深入理解MySql做事器

Mysql逻辑架构图紧张分三层:

1) 第一层卖力连接处理,授权认证,安全等等

每个客户端连接都会在做事器进程中拥有一个线程,做事器掩护了一个线程池,因此不须要为每一个新建的连接创建或者销毁线程。
当客户端连接到Mysql做事器时,做事器对其进行认证,通过用户名和密码认证,也可以通过SSL证书进行认证。
一旦客户端连接成功,做事器会连续验证客户端是否具有实行某个特定查询的权限。

2)第二层卖力编译并优化SQL

这一层包括查询解析,剖析,优化,缓存以及所有的的内置函数。
对付SELECT语句,在解析查询前,做事器会先检讨查询缓存,如果能在个中找到对应的查询结果,则无需再进行查询解析、优化等过程,直接返回查询结果。
所有跨存储引擎的功能都在这一层实现:存储过程,触发器,视图。

3)第三层是存储引擎。

存储引擎卖力在MySQL中存储数据、提取数据。
存储引擎通过API与上层进行通信,这些API屏蔽了不同存储引擎之间的差异,使得这些差异对上层查询过程透明。
存储引擎不会去解析SQL,不同存储引擎之间也不会相互通信,而只是大略地相应上层做事器的要求。

3.InnoDb 逻辑存储构造图

从InnoDb 存储引擎的逻辑存储构造看,所有数据都被逻辑地存放在一个空间中,称之为表空间(tablespace)。
表空间又由段(segment),区(extent),页(page)组成。
页在一些文档中有时候也称为块(block)。
InnoDb 逻辑存储构造图如下:

表空间(tablespace)

表空间是Innodb存储引擎逻辑的最高层,所有的数据都存放在表空间中。
默认情形下,Innodb存储引擎有一个共享表空间ibdata1,即所有数据都存放在这个表空间中内。
如果启用了innodb_file_per_table参数,须要把稳的是每张表的表空间内存放的只是数据、索引、和插入缓冲Bitmap,其他类的数据,比如回滚(undo)信息、插入缓冲检索页、系统事物信息,二次写缓冲等还是放在原来的共享表内的。

段(segment)

表空间由段组成,常见的段有数据段、索引段、回滚段等。
InnoDB存储引擎表是索引组织的,因此数据即索引,索引即数据。
数据段即为B+树的叶子结点,索引段即为B+树的非索引结点。
在InnoDB存储引擎中对段的管理都是由引擎自身所完成,DBA不能也没必要对其进行掌握。

区(extent)

区是由连续页组成的空间,在任何情形下每个区的大小都为1MB。
为了担保区中页的连续性,InnoDB存储引擎一次从磁盘申请4~5个区。
默认情形下,InnoDB存储引擎页的大小为16KB,一个区中一共64个连续的区。

页(page)

页是InnoDB磁盘管理的最小单位。
在InnoDB存储引擎中,默认每个页的大小为16KB。
从InnoDB1.2.x版本开始,可以通过参数innodb_page_size将页的大小设置为4K,8K,16K。
InnoDB存储引擎中,常见的页类型有:数据页,undo页,系统页,事务数据页,插入缓冲位图页,插入缓冲空闲列表页等。

4.Innodb页构造干系示意图

Innodb页构造单体图

InnoDB数据页由以下7部分组成,如图所示:

个中File Header、Page Header、File Trailer的大小是固定的,分别为38,56,8字节,这些空间用来标记该页的一些信息,如Checksum,数据页所在B+树索引的层数等。
User Records、Free Space、Page Directory这些部分为实际的行记录存储空间,因此大小是动态的。

下边我们用表格的办法来大致描述一下这7个部分:

记录在页中的存储流程图

每当我们插入一条记录,都会从Free Space部分,也便是尚未利用的存储空间中申请一个记录大小的空间划分到User Records部分,当Free Space部分的空间全部被User Records部分替代掉之后,也就意味着这个页利用完了,如果还有新的记录插入的话,就须要去申请新的页了,这个过程的图示如下:

不同Innodb页构成的数据构造图

一张表中可以有成千上万条记录,一个页只有16KB,以是可能须要好多页来存放数据。
不同页实在构成了一条双向链表,File Header是InnoDB页的第一部分,它的FIL_PAGE_PREV和FIL_PAGE_NEXT就分别代表本页的上一个和下一个页的页号,即链表的上一个以及下一个节点指针。

5.Innodb索引构造图

我们先看一份数据表样本,假设Col1是主键,如下:

B+树聚拢索引构造图

聚拢索引便是以主键创建的索引聚拢索引在叶子节点存储的是表中的数据

非聚拢索引构造图

假设索引列为Col3,索引构造图如下:

非聚拢索引便是以非主键创建的索引非聚拢索引在叶子节点存储的是主键和索引列利用非聚拢索引查询出数据时,拿到叶子上的主键再去查到想要查找的数据。
(拿到主键再查找这个过程叫做回表)假设所查询的列,刚好都是索引对应的列,不用再回表查,那么这个索引列,就叫覆盖索引。

InnoDB 锁类型思维导图

加锁机制

乐不雅观锁与悲观锁是两种并发掌握的思想,可用于办理丢失更新问题。

乐不雅观锁

每次去取数据,都很乐不雅观,以为不会涌现并发问题。
因此,访问、处理数据每次都不上锁。
但是在更新的时候,再根据版本号或韶光戳判断是否有冲突,有则处理,无则提交事务。

悲观锁

每次去取数据,很悲观,都以为会被别人修正,会有并发问题。
因此,访问、处理数据前就加排他锁。
在全体数据处理过程中锁天命据,事务提交或回滚后才开释锁.

锁粒度

表锁: 开销小,加锁快;锁定力度大,发生锁冲突概率高,并发度最低;不会涌现去世锁。
行锁: 开销大,加锁慢;会涌现去世锁;锁定粒度小,发生锁冲突的概率低,并发度高。
页锁: 开销和加锁速率介于表锁和行锁之间;会涌现去世锁;锁定粒度介于表锁和行锁之间,并发度一样平常

兼容性

共享锁:

又称读锁(S锁)。
一个事务获取了共享锁,其他事务可以获取共享锁,不能获取排他锁,其他事务可以进行读操作,不能进行写操作。
SELECT ... LOCK IN SHARE MODE 显示加共享锁。

排他锁:

又称写锁(X锁)。
如果事务T对数据A加上排他锁后,则其他事务不能再对A加任任何类型的封锁。
获准排他锁的事务既能读数据,又能修正数据。
SELECT ... FOR UPDATE 显示添加排他锁。

锁模式

记录锁: 在行相应的索引记录上的锁,锁定一个行记录gap锁: 是在索引记录间歇上的锁,锁定一个区间next-key锁: 是记录锁和在此索引记录之前的gap上的锁的结合,锁定行记录+区间。
意向锁 是为了支持多种粒度锁同时存在;

来源:掘金,原文https://juejin.im/entry/5d444e685188255d8249c72c

现在人工智能非常火爆,很多朋友都想学,但是一样平常的教程都是为博硕生准备的,太丢脸懂了。
最近创造了一个非常适宜小白入门的教程,不仅普通易懂而且还很风趣诙谐。
以是忍不住分享一下给大家。
点这里可以跳转到教程。

https://www.captainbed.net/suga

标签:

相关文章