001 mysql架构

step1 逻辑架构图

        mysql的逻辑架构按层次分为连接层、SQL业务层、存储引擎层,最下层是文件系统;

step2 组件分析

1.Connectors 连接器

        mysql面向开发者的APIS,根据不同的开发环境及连接方式提供标准的驱动方式;例如,java开发常用的jdbc与odbc方式就是在选择connector连接器。

        MySQL provides standards-based drivers for JDBC, ODBC, and .Net enabling developers to build database applications in their language of choice. In addition, a native C library allows developers to embed MySQL directly into their applications.
        MySQL为JDBC、ODBC和.net提供了基于标准的驱动程序,使开发人员能够用自己选择的语言构建数据库应用程序。此外,原生C库允许开发人员将MySQL直接嵌入到他们的应用程序中。

2.Management Serveices & Utilities 系统管理和控制工具

        mysql系统级别管理,DBA工作空间,主要进行数据库层面(复制、比较、差异、导出、导入)、审核日志层面、服务器层面(实例克隆、实例信息)、系统层面(磁盘使用情况、冗余索引、搜索元数据、进程)、高可用性层面(主从复制、故障转移、主从同步)等相关操作。

3.Connection Pool 连接池

        程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态地对池中的连接进行申请,使用,释放。

4.SQL Interface sql语句接口

        接收/分发sql(DML、DDL),返回用户需要的查询结果;

5.Parser 解析器

        用于对sql进行可执行解析,分为词法解析和语法解析;

  • 5.1 词法解析

       即将sql语句进行分词,例如,select * from T1,其会根据空格将语句中的词分离出来,形成语法树;

        

  • 5.2 语法解析

       mysql依据 SQL92标准对传入的sql进行分析,例如,select * from T1如果书写错误为 elect * from T1,就会出现语法错误,     无法根据语法解析成为正确的语法树;

1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'elect * from user' at line 1

Parser 解析器的目的就是将传入的sql最终解析为可执行的语法树;

SELECT movieTitle
FROM StarsIn
WHERE starName IN (
    SELECT name
    FROM MovieStar
    WHERE birthdate LIKE ‘%1960’
)

6.Optimizer 查询优化器

        mysql并不认为开发者所书写的sql代码是完美的,所以其会对传入的sql(查询)进行优化,优化器主要优化三个方面;

  • 6.1索引优化

        开发者可以建立很多个索引,Mysql Optimizer 只使用一个,最优的那个;

  • 6.2多表关联优化

        遵循小关联大原则,即小表关联大表(两个for循环),即便开发者所写的sql是大表关联小表,Mysql Optimizer也会调整为小表关联大表;

  • 6.3where条件优化(找到mysql认为过滤力度最大的条件先执行)

        mysql对于where条件的顺序读取是从左到右(Oracle是从右到左),首先要找到过滤力度最大的先执行,例如,where id=1 and sex="男",首先执行id=1,主键过滤力度最大,即便语句是 where sex="男" and id=1,mysql Optimizer也会调整过来;【通过explain执行计划来分析实现的优化】

7.Cache和Buffer 查询缓存(8.0后缓存不再用)

        存储执行查询的结果,在下一次执行同样查询的时候直接在缓存中取出,其实现是通过将sql语句hash后的值唯一化方式,即将sql语句hash后的值存入一个map结果的key中(如遇hash冲突将取值继续hash),将对应的结果存入map的value中;

当数据库的数据发生改变时(新增、修改、删除),就是清除相关缓存数据;

8.Pluggable Storage Engines 存储引擎(重点)

        mysql的存储引擎是一种可插拔的实现,因为其是以表为单位进行设置。

        真正获取数据的模块,从File System(文件系统)中获取数据,即IO操作,mysql的IO操作是由Pluggable Storage Engines 存储引擎来实现,mysql的强大在于其存储引擎中的InnoDB;

  • 8.1 存储引擎类型

        MySQL的存储引擎是以表为单位进行指定(engine=InnoDB\myisam);  

  • 8.2 InnoDB和MyISAM存储引擎区别

  • 8.3 存储引擎选型

        InnoDB:支持事务处理,支持外键,支持崩溃修复能力和并发控制。如果需要对事务的完整性要求比较高(比如银行),要求实现并发控制(比如售票),那选择InnoDB有很大的优势。如果需要频繁的更新、删除操作的数据库,也可以选择InnoDB,因为支持事务的提交(commit)和回滚(rollback)。 ​

        MyISAM:插入数据快,空间和内存使用比较低。如果表主要是用于插入新记录和读出记录,那么选择MyISAM能实现处理高效率。如果应用的完整性、并发性要求比 较低,也可以使用。 ​

        MEMORY:所有的数据都在内存中,数据的处理速度快,但是安全性不高。如果需要很快的读写速度,对数据的安全性要求较低,不需要持久保存,可以选择MEMOEY。它对表的大小有要求,不能建立太大的表。所以,这类数据库只使用在相对较小的数据库表。 ​

注意,同一个数据库可以使用多种存储引擎的表;如果一个表要求比较高的事务处理,可以选择InnoDB。这个数据库中可以将查询要求比较高的表选择MyISAM存储。如果该数据库需要一个用于查询的临时表,可以选择MEMORY存储引擎。

step3 执行流程

1.简单执行流程

2.模块化执行流程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值