原来MySQl就是这样工作的!
2013-04-27 08:46
363 查看
一、MySQL简单介绍
MySQL是当今最流行的开源数据库管理系统,超过10亿的下载量足可以证明这点。MySQL以其速度、高可靠性、简单易用,广泛应用,一些大型企业也在逐渐应用,如:Facebook、维基百科等网站。MySQL最早由瑞典的MySQL AB公司开发,后于2008年被Sun收购,2009年Oracle公司收购了Sun公司。它分为社区版和商业版,其体积小、速度快、总体成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库。其社区版的性能卓越,搭配PHP和Apache可组成良好的开发环境。
二、MySQL的基本组成部分流程图:
流程图详解:
所有的用户连接请求都是先发往连接管理器的,连接管理器(是一个侦听器)用于侦听来自客户端的连接,并接受用户请求,用户请求被接收下来,而一个用户请求需要一个线程来响应,因此需要一个线程管理器。线程管理器负责给用户创建生成新的线程或完成线程重置的方式给用户一个响应线程,用户连接进来后需要检查用户权限(是否允许访问mysql服务器等等权限)。这时就需要用户模块出场了,用户模块负责管理用户是否能够连接的,这是管理权限的第一关,如果用户不能请求,那用户请求就终止了,因此用户模块还负责退回用户请求(主要作用是验证用户请求和用户身份的)。
一旦用户具有连接的权限,那用户就可以发一些SQL语句,而每一个SQL语句需要进行分析,不同的语句需要分配给不同的解析器,因此就需要命令分发模块,就把这些不同类型的语句分配给与之对应的解析器上去。如果命令在分发之前是一个查询语句,而且我们的缓存中有内容,就可以直接返回给用户结果了,因此也有可能会跟缓存模块进行交互。当用户发起一个命令之后,例如我们的web,当用户请求资源后,都会记录在日志中的,因此命令分发模块也有可能会和日志模块进行交互的,日志模块的主要功能是记录用户查询的。缓存模块和日志模块并不是并行的,命令分发模块给两者都有可能有交互的。
如果缓存中没有就要将用户请求的命令分发出去,将命令交给解析器(解析查询生成解析数),由解析器判断命令最终属于哪种语句,如果解析器解析此命令是select语句,需要交给优化器进行优化。如果是update、insert、delete语句,需要交给表定义模块(这一过程也要进行权限的判断)。mysql也有与repair相关的语句,那可想而知需要表维护模块了,表维护模块主要作用是修复表中的某些逻辑错误的。mysql中也有很多状态变量,而这些状态变量也需要状态报告模块来存储每一个执行过程中的状态信息。mysql也有复制的功能,把主mysql服务器上的数据同步到从mysql服务器上的过程,这就是复制模块的功能。
无论哪个模块,用户最终要完成操作,必须要检查用户是否具有权限,上面所说的表定义模块、表维护模块都需要检查用户权限,因此最终这些命令语句都要交给访问控制模块来控制:用于检验客户端用户的操作是否具有足够的操作权限,来执行请求操作如果访问模块检查后发现没有任何问题,会把这些命令语句交给另一个组件表管理器,由表管理器完整真正意义上的操作,表管理器负责创建、读取或修改表定义文件的。表管理器交给存储引擎(存储引擎的接口),存储引擎交给最核心的-->MYISAM或INnoDB
MySQL是当今最流行的开源数据库管理系统,超过10亿的下载量足可以证明这点。MySQL以其速度、高可靠性、简单易用,广泛应用,一些大型企业也在逐渐应用,如:Facebook、维基百科等网站。MySQL最早由瑞典的MySQL AB公司开发,后于2008年被Sun收购,2009年Oracle公司收购了Sun公司。它分为社区版和商业版,其体积小、速度快、总体成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库。其社区版的性能卓越,搭配PHP和Apache可组成良好的开发环境。
二、MySQL的基本组成部分流程图:
流程图详解:
所有的用户连接请求都是先发往连接管理器的,连接管理器(是一个侦听器)用于侦听来自客户端的连接,并接受用户请求,用户请求被接收下来,而一个用户请求需要一个线程来响应,因此需要一个线程管理器。线程管理器负责给用户创建生成新的线程或完成线程重置的方式给用户一个响应线程,用户连接进来后需要检查用户权限(是否允许访问mysql服务器等等权限)。这时就需要用户模块出场了,用户模块负责管理用户是否能够连接的,这是管理权限的第一关,如果用户不能请求,那用户请求就终止了,因此用户模块还负责退回用户请求(主要作用是验证用户请求和用户身份的)。
一旦用户具有连接的权限,那用户就可以发一些SQL语句,而每一个SQL语句需要进行分析,不同的语句需要分配给不同的解析器,因此就需要命令分发模块,就把这些不同类型的语句分配给与之对应的解析器上去。如果命令在分发之前是一个查询语句,而且我们的缓存中有内容,就可以直接返回给用户结果了,因此也有可能会跟缓存模块进行交互。当用户发起一个命令之后,例如我们的web,当用户请求资源后,都会记录在日志中的,因此命令分发模块也有可能会和日志模块进行交互的,日志模块的主要功能是记录用户查询的。缓存模块和日志模块并不是并行的,命令分发模块给两者都有可能有交互的。
如果缓存中没有就要将用户请求的命令分发出去,将命令交给解析器(解析查询生成解析数),由解析器判断命令最终属于哪种语句,如果解析器解析此命令是select语句,需要交给优化器进行优化。如果是update、insert、delete语句,需要交给表定义模块(这一过程也要进行权限的判断)。mysql也有与repair相关的语句,那可想而知需要表维护模块了,表维护模块主要作用是修复表中的某些逻辑错误的。mysql中也有很多状态变量,而这些状态变量也需要状态报告模块来存储每一个执行过程中的状态信息。mysql也有复制的功能,把主mysql服务器上的数据同步到从mysql服务器上的过程,这就是复制模块的功能。
无论哪个模块,用户最终要完成操作,必须要检查用户是否具有权限,上面所说的表定义模块、表维护模块都需要检查用户权限,因此最终这些命令语句都要交给访问控制模块来控制:用于检验客户端用户的操作是否具有足够的操作权限,来执行请求操作如果访问模块检查后发现没有任何问题,会把这些命令语句交给另一个组件表管理器,由表管理器完整真正意义上的操作,表管理器负责创建、读取或修改表定义文件的。表管理器交给存储引擎(存储引擎的接口),存储引擎交给最核心的-->MYISAM或INnoDB
相关文章推荐
- 原来MySQl就是这样工作的
- 美国人教你这样用Google,你真的会变特工!!!(看了才感叹原来这么多年的GOOGLE是白用了~这就是百度永远无法超越G的原因吧~)
- 4程序员小飞原计划三天完成某个任务,现在是第三天的下午,他马上就可以做完。但是在实现功能的过程中,他越来越意识到自己原来设计中的弱点,他应该采取另一个办法,才能避免后面集成阶段的额外工作。但是他如果现在就改弦更张,那势必要影响自己原来估计的准确性,并且会花费额外的时间,这样他的老板、同事也许会因此看不起他。如果他按部就班地按既定设计完成,还要花更多时间在后续集成上,但那就不是他个人的问题了,怎么办
- 100元的友谊原来就是这样
- 工作也许就是这样吧
- 许多游戏公司都是先布置办公室,让开发团队在里面协同工作,刻苦努力多年创造出新知识产权 (IP),然后将产品交给零售店和直接分销网站出售,Steam 就是一个典型的例子。但愿能获得利润,这样他们就可以再
- 看鞋识男人 女人原来就是这样选择老公的呀
- “如果你倾尽全力,只是为了击败在做同样工作的其他公司,那这样的工作怎么会令人兴奋?这就是许多公司衰落的原因。
- 啊哈哈哈,原来修改MySQL工作路径这么简单
- 如果每一个聪明的工程 师都打算在自己四年职业生涯后停止做开发而仅做管理工作,我们是无法建立像SQL Server这样的产品的
- 就是这样的.
- 外链原来是这样增加的
- 工作后好多师弟师妹问我spring aop,我就写了这样一个例子
- 原来是这样的——生活中的随笔
- 程序员是这样炼成的(16)-技术和工作都是浮云
- mysql组合索引"最左前缀"的结果。简单的理解就是只从最左面的开始组合
- 生意就是这样做成的
- 时间就是这样一点一点的度过的
- unset是不能清除保存在本地电脑上的cookie的,用于session就可以(弄了半天原来是这样)
- 七夕临近有感,原来爱情是这样的!(ZT)