mysql | 全貌
会当凌绝顶,一览众山小。如果把在操作mysql中遇到的问题比喻成我们需要跨过去的“众山”,那么“绝顶”是什么?如果我们能找到这个“绝顶”并且登上它,是不是就能顺利的跨过这些“众山”,顺利的解决问题?
我以为mysql中的“绝顶”是mysql的的基础架构,或者说任何软件的绝顶都是它的基础架构。只要弄清楚基础架构,并在分析问题的过程中牢牢的抓住基础架构,从基础架构出发来分析问题,就更容易定位问题,找到解决问题的方法。
那么基础架构是什么呢,说的再直白一点,我认为就是软件里面分了几个层,每层里面分了几个模块,这些层和模块的功能是什么,是怎么流转的。有大牛说过“计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决(Any problem in computer science can be solved by anther layer of indirection)”。既然中间层已经成为软件设计中的共识,那么我们学习一个软件的时候,如果能先从分层的角度来考虑,也许可以快速的掌握一个软件的全貌。
具体到msyql来说,mysql分了几个层,每个层里有哪些模块呢?根据极客时间的专栏<mysql实战45讲>的讲解,我觉得mysql分成了server层和存储引擎两个层。server层是通用的(只有一种),负责数据操作的前期准备工作,存储引擎是插件式的(有多种),负责存储数据,提供数据的读写接口。mysql支持多种存储引擎,比如最常使用的InnoDB,还有MyISAM,Memory等多种存储引擎。
server层包括连接器,分析器,优化器,执行器四个模块。每个模块负责独立的一块功能。连接器负责管理连接,权限验证;分析器负责词法分析,语法分析;优化器负责执行计划生成,索引选择;执行器负责和存储引擎交互,返回结果。