深入MySQL(一):MySQL的组织架构
今天开始将自己所学过的MySQL的知识都尝试融会贯通,并且用写博客的方式记录分享下来。
今天讲的主题是MySQL的组织架构,对于学习一个中间件或者开源项目而言,我觉得最重要的便是先知晓其组织架构,以一个全局的姿态去观察架构之后,再有选择性的深入到细节,才能够学的快且有收获。
MySQL的架构图
根据图可以观察到,MySQL主要是分为Server层与存储引擎层两大块;而客户端的含义非常广泛,理论上只要可以连接到MySQL,就能够算上是一个客户端;我们主要讨论MySQL架构中的Server层与存储引擎层。
Server层
Server层可以看做是将MySQL的共性操作,也就是所有跨存储引擎的操作都放到了这一层进行实现,比如查询、解析、优化、缓存以及所有的内置函数、存储过程、视图、触发器。
连接器的作用主要是判断用户是否可以利用某个账号登录MySQL,其中比较有意思的一点是一旦利用某个账号登录上去MySQL之后,它本次连接的权限便固定了,如果要让修改权限操作生效,那么便需要将本次连接重新连接,这样才会是新的权限。
查询缓存的作用是便是缓存一些热点查询的结果集,然后直接返回。它有很多很多的缺陷,它的实现是利用一个哈希表,将SQL语句的hash对应结果集。
查询缓存的缺陷很明显,主要为两个地方:
- 映射的Key是SQL语句的hash值,只要与key的查询有任何不一致的地方,都会查询缓存失败。
- 一旦进行更新,会直接清空缓存表。
这个功能太过于鸡肋,所以直接在8.0中去除,后续也不会再提及。
解析器的作用是解析SQL语句,利用词法分析、语法分析检查SQL语句是否存在语法错误的情况。
优化器的作用便是对SQL语句进行优化,比如索引的选取,连接的顺序等,具体的如何优化在后续的篇章里会介绍;
执行器的作用是生成执行计划,然后调用存储引擎的接口,进行数据的操作。
以上便是Server层的大致内容,总的来说,Server层便是由连接、解析、优化、执行四个部分组成,MySQL的架构将解析与获取数据拆开,也为后续的一些特性的实现提供了基础。
存储引擎层
存储引擎层的操作主要负责的是数据的存储与读取,不同的存储引擎有不同的特性,现在应用最多的存储引擎是Innodb,现在已经是MySQL的默认存储引擎;而在早起的版本中,MySQL的默认存储引擎为MyISAM,后期我们也会有关于这两个存储引擎的比较。
我们所熟知的事务、行锁、多版本并发控制、事务日志都是由存储引擎层实现的,而上述的这些内容,Innodb存储引擎是都支持的,所以MySQL官方后续将其设立为了默认引擎。
存储引擎它底层由数十个底层函数,而Server层是执行器利用组合这些函数来达到读取数据的能力,我比较喜欢把这个过程称为“乐高积木”。
总结
MySQL的基础架构为其后续的细节实现提供了基础,Server层的内容我们后续比较重要的内容是优化器如何进行优化;存储引擎层的内容,我们主要学习Innodb的特性以及在某些条件下,使用其他存储引擎的便利性。
MySQL的成功,与其基础架构具有很大的关联性,在Oracle霸占市场的年代,凭借复制所扩展出来的横向扩展功能让其在数据库市场下独占一角;后续又通过Innodb的出现,优化补充了很多老版本所出现的问题。所以希望各位读者能够根据自己之前的所学,结合这篇文章,对于MySQL的基础架构能够有新的认识。
深入MySQL(一):MySQL的组织架构的更多相关文章
- MySQL性能调优与架构设计——第 16 章 MySQL Cluster
第 16 章 MySQL Cluster 前言: MySQL Cluster 是一个基于 NDB Cluster 存储引擎的完整的分布式数据库系统.不仅仅具有高可用性,而且可以自动切分数据,冗余数据等 ...
- MySQL性能调优与架构设计——第 15 章 可扩展性设计之Cache与Search的利用
第 15 章 可扩展性设计之Cache与Search的利用 前言: 前面章节部分所分析的可扩展架构方案,基本上都是围绕在数据库自身来进行的,这样是否会使我们在寻求扩展性之路的思维受到“禁锢”,无法更为 ...
- MySQL性能调优与架构设计——第 14 章 可扩展性设计之数据切分
第 14 章 可扩展性设计之数据切分 前言 通过 MySQL Replication 功能所实现的扩展总是会受到数据库大小的限制,一旦数据库过于庞大,尤其是当写入过于频繁,很难由一台主机支撑的时候,我 ...
- MySQL性能调优与架构设计——第11章 常用存储引擎优化
第11章 常用存储引擎优化 前言: MySQL 提供的非常丰富的存储引擎种类供大家选择,有多种选择固然是好事,但是需要我们理解掌握的知识也会增加很多.每一种存储引擎都有各自的特长,也都存在一定的短处. ...
- MySQL性能调优与架构设计——第3章 MySQL存储引擎简介
第3章 MySQL存储引擎简介 3.1 MySQL 存储引擎概述 MyISAM存储引擎是MySQL默认的存储引擎,也是目前MySQL使用最为广泛的存储引擎之一.他的前身就是我们在MySQL发展历程中所 ...
- MySQL InnoDB存储引擎体系架构 —— 索引高级
转载地址:https://mp.weixin.qq.com/s/HNnzAgUtBoDhhJpsA0fjKQ 世界上只两件东西能震撼人们的心灵:一件是我们心中崇高的道德标准:另一件是我们头顶上灿烂的星 ...
- MySQL数据库的优化(下)MySQL数据库的高可用架构方案
MySQL数据库的优化(下)MySQL数据库的高可用架构方案 2011-03-09 08:53 抚琴煮酒 51CTO 字号:T | T 在上一篇MySQL数据库的优化中,我们跟随笔者学习了单机MySQ ...
- MySQL运行原理与基础架构
1.MySQL基础 MySQL是一个开放源代码的关系数据库管理系统.原开发者为瑞典的MySQL AB公司,最早是在2001年MySQL3.23进入到管理员的视野并在之后获得广泛的应用. 2008年My ...
- DRBD+Heartbeat+Mysql高可用读写分离架构
声明:本案例仅为评估测试版本 注意:所有服务器之间必须做好时间同步 架构拓扑 IP信息: Heartbeat安装部署 1.安装heartbeat(主备节点同时安装) [root@master1 ~]# ...
随机推荐
- icmpsh之icmp反弹shell
一,技术原理 向ping www.baidu.com时,本机会先向百度的服务器发送ICMP请求包,如果请求成功了,则百度服务器会回应ICMP的响应包 引用百度百科: ICMP(Internet Con ...
- 【Python自动化Excel】pandas处理Excel数据的基本流程
这里所说的pandas并不是大熊猫,而是Python的第三方库.这个库能干嘛呢?它在Python数据分析领域可是无人不知.无人不晓的.可以说是Python世界中的Excel. pandas库处理数据相 ...
- Java NIO Channel 使用
Java NIO 中的 Channel 分类: FileChannel SocketChannel ServerSocketChannel DatagramChannel channel 分类 Fil ...
- Redis内存分析工具之redis-rdb-tools的安装与使用
操作系统:Centos7 1.redis-rdb-tools工具是用python语言编写的,所以首先需要安装python: 安装: (1)用 wget 下载 python 2.7 并解压( 如果 ...
- 干掉 Postman?测试接口直接生成API文档,ApiPost真香!
实不相瞒我的收藏夹里躺着很多优质的开发工具,我有个爱好平时遇到感兴趣的开发工具都会记录下来,然后有时间在慢慢研究.前几天刚给同事分享一款非常好用的API文档工具,真的被惊艳到了,粉丝朋友们也感受一下吧 ...
- 数据库锁(mysql)
InnoDB支持表.行(默认)级锁,而MyISAM支持表级锁 本文着中介绍InnoDB对应的锁. mysql锁主要分为以下三类: 表级锁:开销小,加锁快:不会出现死锁:锁定粒度大,发生锁冲突的概率最高 ...
- CTF-sql-sql约束注入
create table user( id int not null auto_increment, username varchar(30) not null, password varchar(3 ...
- 《剑指offer》面试题59 - I. 滑动窗口的最大值
问题描述 给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值. 示例: 输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3 输出: [3,3,5,5 ...
- gin中模型的绑定和验证
要将请求体绑定到结构体中,使用模型绑定. Gin目前支持JSON.XML.YAML和标准表单值的绑定(foo=bar&boo=baz). Gin使用 go-playground/validat ...
- 开源办公套件DzzOffice安装教程
DzzOffice开源办公套件 DzzOffice是一套开源办公套件,适用于企业.团队搭建自己的 类似"Google企业应用套件"."微软Office365"的 ...