深入了解Mysql【九】B+树
B+树由B树和索引顺序访问方法(ISAM,MyISAM引擎的最初参考数据结构)演化而来。
1、定义
B+树是为磁盘或者其他直接存储辅助设备设计的一种平衡查找树。
所有的记录都按照键值的大小顺序存放在同一层的叶子节点上,由各叶子节点指针连接。
m阶B+树表示了内部结点最多有m-1个关键字(或者说内部结点最多有m个子树),阶数m同时限制了叶子结点最多存储m-1个记录。
2、优势
非节点存储更多的key,使得查询的IO次数更少。
数据都存储在叶子节点,查询性能稳定。
所有叶子节点是有序链表,便于范围查询。
3、插入分为三种情况:
叶子节点Page未满,索引Page未满。直接将数据插入到叶子节点Page。
叶子节点Page满,索引Page未满。拆分叶子节点Page,将中间的数据的键值进位到索引Page。
叶子节点Page满,索引Page满。拆分叶子节点Page,将中间的数据的键值进位到索引Page;拆分满了的索引Page,将中间数据进位到新的索引Page。
例子:参考于B树和B+树的插入、删除图文详解。主要是不想画图了。一颗5阶B+树的插入:(5阶B+树的节点,最少2个key,最多4个 ...
深入了解Mysql【八】树、二叉树、二叉查找树、平衡二叉树、B树、B+树的简单介绍
本篇文章全部摘抄翻译于:javatpoint学习的进程终于到了Mysql的索引部分,在这部分的开始,必须要简单的看一下数据结构和算法相关的知识点。下面依次简单的看一下Tree、Binary Tree、Binary Search Tree、AVL Tree、B Tree、B+ Tree。
1、Tree
树是一种数据结构,包含一个或者多个数据节点的集合,其中一个节点被指定为树的根,其余节点被称为根节点的子节点。
除根节点以外的其他节点均被划分为多个非空集,其中每个空集都称为子树。
树的节点之间的关系为父子关系或者姐妹关系。
在一般树中,一个节点可以有任意数量的子节点,但只能有一个父节点。
下图显示了一棵树,其中节点A是树的根节点,而其他节点可以视为A的字节。
基本术语
根节点根节点是树层次结构中的最高的节点,根节点没有任何父节点。
子树如果根节点不为空,则树T1\T2\T3被称为根节点的子树。
叶子节点没有任何字节点的树的节点称为叶子节点。
路径连续边的顺序成为路径,如上图中,到节点E的路径为A->B->E。
Degree节点拥有的子节点的个数,如B节点的度为2,叶子节点的度 ...
深入了解Mysql【七】InnoDB脏页刷新机制Checkpoint与doublewrite
缓冲池的设计目的是为了协调CPU速度与磁盘速度的鸿沟。页的操作都在在缓冲池中完成的。如果一条DML语句,如Update或者Delete改变了页中的记录,那么此时页是脏的,即缓冲池中的页的版本比磁盘的要新。数据库需要将最新版本的页刷新到磁盘。
为了避免数据的丢失,事务数据库系统采用Write Ahead Log策略,事务提交时,先写重做日志,再修改页,这样,当发生宕机是,可以用重做日志来恢复数据。
如果要用重做日志来恢复所有的数据,有两个条件:
缓冲池可以存储所有的数据
重做日志无限大
显然,上面两个都不能达到,所以产生了Checkpoint技术。
1、Checkpoint作用
缩短数据库恢复时间
缓冲池不够用时,将脏页刷新到磁盘
重做日志不可用时,刷新脏页
当数据库发生宕机的时候,数据库只需要将Checkpoint后的重做日志进行恢复。
2、CheckPoint类型InnoDB存储引擎有两种CheckPoint:
Sharp Checkpoint数据库关闭时触发,将所有的脏页刷新到磁盘。
Fuzzy Checkpoint刷新部分脏页。
3、Fuzzy Checkpoint的触 ...
深入了解Mysql【六】一条SQL语句的执行过程
在开始本篇之前,先贴一张图:
图中大概的标出了SQL执行过程的走向。
SQL语句的执行顺序
客户端通过TCP发送连接到MySQL服务器,服务器端的连接池会对请求进行鉴权验证以及资源分配。
如果开启了缓存,且是一条查询语句,则进入查询缓存模块,判断是否被缓存过,如果命中缓存,则直接返回结果,否则下一步。
进入SQL接口模块,进行简单的语法校验。
进入解析模块,进行语句解析。
将解析好的语句转给优化器,生成执行计划。
再进入InnoDB引擎,首先会判断该SQL涉及到的页是否在缓存中,如果不存在,则从磁盘读取相应的索引及数据页,加载到缓存。
如果是查询语句使用一致性非锁定读,读取数据,并将查询结果返回到服务层。
如果是DML语句读取到相关页,先试图给这个SQL涉及到的记录加锁。加锁成功后,先写Undo页,逻辑的记录这些修改前的状态。然后修改相关记录,这些操作会同步物理的记录至redo log buffer。如果涉及非唯一辅助索引的更新,还需要使用insert buffer。事务提交时,会启用内部分布式事务,先将SQL语句记录到binlog中,再根据系统设置,刷新redo log buffer ...
深入了解Mysql【五】InnoDB逻辑存储结构
InnoDB存储引擎的所有数据都逻辑地存储在表空间(tablespace)中,表空间又由段(segment)、区(extent)、页(page)组成、行(row)。如图:
1、表空间(tablespace)所有数据都是存储在表空间中,InnoDB有一个默认的共享表空间ibdata1,每张表也可以有单独的表空间ibd。单独的表空间中存放的只有数据、索引和插入缓存,其他的数据,如:Undo(撤销)信息,系统事务信息,二次写缓存(double write buffer)等还是存放在共享表空间中。
2、段(segment)表空间由段组成,常见有数据段、索引段、回滚段。
数据段为B+树的叶子节点,图中的leaf node segment。
索引段为B+树的非索引节点,图中的non-leaf node segment。
回滚段就是图中的rollback segment。
注意:并不是每个对象都有段,因此可以说表空间是由分散的页和段组成。
3、区(extent)
每个区的大小为1MB。对于大的数据段,每次最多可以申请4个区,以此保证数据的顺序性能。
一个区是物理上连续分配的一段空间,每一个段至少 ...
深入了解Mysql【四】Mysql数据库与InnoDB存储引擎表的各种类型文件
本篇将分析学习构成Mysql数据库和InnoDB存储引擎表的各种类型文件,具体分为:参数文件、日志文件、套接字文件、pid文件、表结构定义文件、InnoDB存储引擎文件。
1、参数文件1.1、查看my.cnf文件12mysql --help | grep my.cnfcat /etc/my.cnf
1.2、查看所有参数1SHOW VARIABLES
2、日志文件日志文件记录了影响Mysql数据库的各种类型活动。常见的有:
2.1、错误日志记录了mysql启动、运行、关闭过程。查看错误日志存储的地方:查看错误日志的内容:
2.2、二进制日志二进制文件记录了对数据路执行的所有更改操作,不涉及到select等操作。二进制日志有以下两种作用:
恢复数据的恢复需要二进制日志。
复制通过复制和二进制日志,可以使得一台远程的Mysql数据库与一台Mysql数据库进行实时同步,做高可用。
服务器中的二进制文件:这里的mysql-bin.000001为二进制文件,mysql-bin.index为二进制的索引文件,用来存储过往生产的二进制日志序号。如:
2.3、慢查询日志可以通过慢查询日志,找到 ...
深入了解Mysql【三】InnoDB体系结构
整合几个资料,自己画的InnoDB体系图:
本篇文章主要内容就是介绍这张图中的所有内容。由图可知,InnoDB存储引擎主要由两部分组成:后台线程和内存池。使用多线程的作用就是能充分发挥现在计算机的性能,而内存池的使用是为了解决CPU与磁盘速度不匹配的问题,下面分别介绍。
1、后台线程主要作用是负责刷新内存池中的数据,保证缓冲池中的内存缓存的是最近的数据。此外,将已修改的数据文件刷新到磁盘文件,同时保证在数据库发生异常情况下InnoDB能恢复到正常的运行状态。
1.1、Master Thread负责将缓冲池中的数据异步刷新到磁盘,保证数据的一致性,包括脏页的刷新,合并插入缓存,undo log页的回收。
1.2、IO ThreadInnoDB用了大量的异步IO处理IO请求,IO Thread主要负责处理这些请求的回掉,包括10个线程,分别为4个write、4个read、1个insert buffer、1个log Thread,分别负责读写请求的IO回调、insert buffer、重做日志。
1.3、Purge Thread事务提交后,需要回收undo log,Purge Thread就 ...
深入了解Mysql【二】存储引擎的比较
Mysql中插件式存储引擎是一个很重要的特点,存储引擎决定了如何存储和索引数据,是否使用事务等。
查看Mysql支持的存储引擎mysql提供了多种存储引擎,我使用的mysql版本为5.7.23-log,其支持的存储引擎有:图中,默认的存储引擎是InnoDB;其中Transactions表示是否支持事务;XA表示是否支持分布式XA规范;Savepoints表示是否支持事务保存点;
Mysql常用存储引擎
这里简单的介绍几个存储引擎。
InnoDB存储引擎
InnoDB存储引擎支持事务,使用行级锁设计,也支持外键(虽然很少用外键);
InnoDB使用多版本并发控制(MVCC)来获得高并发性,并且实现了SQL标准的4中隔离级别,默认为repeatable read(允许幻读)。
对于表中数据的存储,InnoDB存储引擎采用了聚集的方式,因此每张表的存储都是按主键的顺序进行存放,如果没有显式的在表定义时指定主键,其会为每一行生成6字节的ROWID作为主键。
MyISAM存储引擎
MyISAM存储引擎不支持事务、表锁设计,支持全文索引,面向OLAP数据库应用,比如数据仓库。
MyISAM存储引 ...
深入了解Mysql【一】Mysql体系结构
1、Mysql体系结构在深入了解Mysql的技术之前,先看一下Mysql的体系结构,在网上找了一幅图,没找到具体的出处:
由图可知,Mysql体系分为4层:连接层、Mysql服务、存储引擎、具体的文件系统。
1.1、连接层包括了各种语言的驱动代码,用来和mysql进行交互。
1.2、Mysql服务包括6个模块:连接池、管理服务和工具组件、SQL接口、解析器、优化器、缓存。
1、连接池管理用户的连接,池化技术都是为了节省资源。
2、管理服务和工具组件一些工具,比如备份恢复、Mysql复制、集群。
3、SQL接口接受用户的SQL命令,并返回用户需要的结果。
4、解析器解析SQL,做一些权限校验,语法结构检测解析。
5、优化器对查询进行优化,将SQL语句改成机器最喜欢的样子。
6、缓存如果查询命中缓存,则直接返回,不再进行后续的物理查找。
1.3、存储引擎管理数据的引擎,数据在关系型数据库中是以表的形式存储,所以存储引擎也是以表来定义,一个库中,每个表的类型可以不同。插件式存储引擎也成为表类型,常用的如InnoDB、MyISAM等。
1.4、底层文件系统底层物理文件包括了日志文件、数据文 ...
聊聊计算机网络及网络协议
一次网页请求的整个过程当我们在浏览器的地址栏输入了URL,按下Enter之后发生了什么呢?
DNS解析什么是DNS解析?公司的网络经常可以发微信钉钉,但是就是访问不了网页,这是为什么?
客户端发起TCP连接请求客户端发起HTTP请求服务端负载均衡服务端响应HTTP请求服务端关闭TCP连接浏览器渲染网络协议什么是协议?协议三要素
语法,就是这一段内容要符合一定的规则和格式。例如,括号要成对,结束要使用分号 等。
语义,就是这一段内容要代表某种意义。例如数字减去数字是有意义的,数字减去文本一 般来说就没有意义。
顺序,就是先干啥,后干啥。例如,可以先加上某个数值,然后再减去某个数值。
网络体系结构经常听说OSI七层网络模型、TCP/IP四层模型、五层模型,他们之间有什么区别呢?
以上分别对应TCP/IP四层模型、五层模型、OSI七层模型
OSI七层模型OSI(Open System Interconnect),即开放式系统互联。 一般都叫OSI参考模型,是ISO(国际标准化组织)组织在1985年研究的网络互连模型。
ISO为了更好的使网络应用更为普 ...