Mysql逻辑体系架构(大致架构分为三层)传奇源码完整版,ubuntu 卡紫屏,Tomcat猫砂盆官网,网络爬虫遍历,think php漏洞补丁,seo服务选择lzw第一层:连接线程处理
客户端——>连接线程处理(连接处理,授权认证,安全)
第二层:包含大部分mysql核心服务
查询缓存——>解析器——>优化器——>执行查询
第三层:包含存储引擎
存储引擎负责mysql中数据的存储和提取(和Linux下的文件系统类似)
Mysql逻辑体系架构—详细介绍(分为八个步骤)
1.Connectors
指的是不同预言中与SQL的交互
2. Enterprise Management Services & Utilities
系统管理和控制工具
3. Connection Pool(连接池)
管理缓冲用户连接,线程处理等需要缓存的需求。
负责监听对MySQL Server的各种请求,接受连接请求,转发所有连接请求到线程管理模块。
每一个连接上MySQL Server的客户端请求都会被分配(创建)一个连接线程为其单独服务,并对连接线程进行了缓存,因此不需要为每个client连接单独创建和销毁,而连接线程的主要工作就是负责MySQL Server与客户端的通信,接收客户端的命令请求,传递Server端的结果信息,线程管理模块则负责管理维护这些连接线程,包括线程的创建,线程的cache等等
4.SQL Interface(SQL接口)
接受用户的SQL命令,并且返回用户需要查询返回的结果,比如select from就是调用SQL Interface
5.Parser(解析器)
SQL命令传递到解析器的时候会被解析器验证和解析,解析器是由Lex和YACC实现的,是一个很长的脚本,在MySQL中我们习惯将所有Client端发给Server端的命令都称为query,在MySQL Server里面,连接线程接收到客户端的一个Query后,会直接将query传递给专门负责将各种Query进行分类然后转发给各个对应的处理模块
主要功能:
a. 将SQL语句进行语义和语法分析,分解成数据结构,然后按照+同的操作类型进行分类,做出针对性的转发到后续步骤,以后SQL语句的传递和处理就是基于这个结构的
b. 如果在分解构成中遇到错误,那么就说明这个sql语句是不合理的
6.Optimizer(查询优化器)
SQL语句在查询之前会使用查询优化器对查询进行优化,就是优化客户端请求query,根据客户端请求的query语句和数据库中的一些统计信息,在一系列算法基础上进行分析,得出一个最优策略,告诉后面的程序如何取得这个query语句的结果,使用的是 “选取-投影-联接” 策略进行查询;
比如:select uid,name from user where gender=1;
这个查询语句先根据where后面的语句进行选取,而不是先将表全部查询出来以后再进行gender过滤,然后根据uid和name进行属性投影,而不是将所有的属性全部取出来以后再进行过滤,最后将这两个查询条件联接起来生成最终的查询结果
7.Cache 和 Buffer(查询缓存)
主要功能是将客户端提交给 Mysql 的 Select的类query请求的返回的结果集cache到内存中,与该query的一个hash值做一个对应,该query所取数据的基表发生任何数据的变化之后,MySQL会自动使该query的Cache失效,在读写比例非常高的的应用系统中,Query Cache对性能的提高是非常显著的,当然它对内存的消耗也是非常大的。
如果查询缓存中有有效的命中查询结果,查询语句就可以直接去查询缓存中取数据,这个缓存机制是由一系列小缓存组成的,比如表缓存,记录缓存,Key缓存,权限缓存等等
8.pluggable storage Engines(插件式存储引擎)
存储引擎接口:MySQL区别于其他数据库的最重要的特点就是其插件式的表存储引擎。
MySQL插件式的存储引擎架构提供了一系列标准的管理和服务支持,这些标准与存储引擎本身无关,可能是每个数据库系统都必须的,比如SQL分析器和优化器等,而存储引擎是底层物理结构的实现。每个存储引擎开发者都可以按照自己的意愿进行开发。
9.file system
文件系统,数据,日志(redo,undo)索引,错误日志,查询记录,慢查询等
注意:存储引擎是基于表的,而不是数据库
数据库的工作流程
最上层:客户端连接
第二层:核心服务
第三层:数据库引擎层
FAQ分析
1.什么是插件式存储引擎
2.什么是LRU缓存
在JVM中Ehcache的缓存策略包含
LRU – least recently used(最近最少使用)
LFU – least frequently used(最不经常使用)
FIFO – first in first out, the oldest element by creation time(清除最早缓存的数据,不关心是否经常使用)
mysql教学