Mysql现在是大多数公司企业在用的数据库,之所以用Mysql,一点是因为Mysql是开源软件,一些有能力的公司会基于已有的Mysql架构,进行修改、调整改成适合自己公司的业务需要。

一点是因为Mysql免费,相对昂贵的Oracle服务,对于很多刚起步的公司来说,是最适合不过的数据库了。

  之所以要认识Mysql的逻辑架构,就好比我们自己在做开发时,首先需要先掌握自己系统用的分层架构,这样在开发的过程中,如果有哪个环节产生问题,就很好排查。认识Mysql的逻辑架构也同理,我们在用Mysql的时候,我们不清楚它什么时候会出现问题,但是当出现问题时(比如优化查询sql,要从哪一步开始),我们可以更清楚的定位问题。

1.Connections 连接器

我们连接Mysql的服务作为客户端连接Mysql服务端,Mysql可以连接各个编程语言平台

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

作为Mysql服务的管理和控制工具,比如备份、还原、复制、集群等

3.连接池(Connection Pool)

连接池的主要功能是提供连接认证、线程复用、连接数限制等

4.SQL Interface(SQL接口)

这里主要是接收Mysql 的DML、DDL语句,以及存储过程、视图、触发器等

5.Parse(解析器)

这里主要的对传过来的sql字符串进行解析,比如我们一开始接触的jdbc编程,就是将字符串类型的sql语句发送到mysql里,然后解析器首先对sql语句进行词法分析,形成语法树,接着再对语法树进行语法分析,看各个分词是否符合SQL92标准,符合的话再执行下一环节业务处理。

6.查询优化器(Optimizer)

查询优化器根据传过来的SQL语句,进行分析判断是否是最优的执行语句,主要针对一下三个方面进行分析:
* 使用哪一个索引(一个表有若干个索引,选择过滤力度最大的那个)
* 多表关联的表连接顺序
* WHERE条件的先后顺序(根据MYSQL最左前缀原则,会重新摆放条件顺序)

7.查询缓存(Cache&Buffer)

MYSQL会将每一条SQL进行hash处理后将hash值放到一个map中,每次有SQL来时先计算SQL的hash值,比较是否相同,相同的话可以执行内存的SQL,而不必对新的SQL语句进行解析、优化等操作,加快执行效率。

8.存储引擎(Pluggable Storage Engines)

MSQL的存储引擎支持可插拔特性,即用户可随意替换想用的存储引擎,也可以自定义自己的存储引擎,这里主要针对INNODB、MYISAM存储引擎进行分析比较。

平时涉及到存储引擎的选型,主要针对业务的需要来选择,可以参考各自的特点。

存储引擎的选型:

InnoDB:

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

MyISAM:

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

MEMORY:

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

  这里有一张MYSQL的简单执行流程图,凭靠这张图对MYSQL整体的一个执行流程会有清晰的认识。

  MYSQL的逻辑架构就介绍到这里。当然MYSQL还有对应的物理架构,不过这一块主要涉及到MYSQL的各个日志文件,以及各个表的数据文件以及索引文件,在后面的章节再做介绍。

更多相关文章

  1. Android(安卓)的 supportdesign
  2. Android架构分析之使用自定义硬件抽象层(HAL)模块
  3. Android(安卓)RIL总体架构介绍
  4. Android(安卓)源码结构
  5. Android架构知识
  6. Android(安卓)MVP Demo
  7. Android(安卓)P Android.dp添加逻辑判断
  8. Android(安卓)系统中GPS Location Service 的实现与架构
  9. Android(安卓)GPS架构分析

随机推荐

  1. jquery IE9没有错,IE8出错了
  2. php中的json对象未被读取
  3. Internet Explorer导致无效的真实性令牌
  4. Android+Jquery Mobile学习系列(6)-个人
  5. 将css添加到jquery数据表中的特定单元格
  6. 使用jQuery将行添加到表的tbody
  7. Jquery ready和window.onload方法区别
  8. jquery插件——仿新浪微博限制输入字数的
  9. KendoUI和jQuery 1.9.0的问题
  10. jQuery.zTree 点击节点展开折叠子节点