Mysql系列一(结构)

一:引言:
Mysql作为现今最流行的关系型数据库,我想大家都不陌生吧,可能大家在工作中都有或多或少的应用,但是其底层原理到底是何如实现的呢?可能很多的人概念都很模糊,博主自己也是处于学习当中,希望能把自己了解到的一些知识记录分享一下,欢迎大家的批评指正!
二:结构:
Mysql系列一(结构)
借用一张图,从图中大家可以看到,mysql底层实现原理通常是由三层组成的。
最上层:是客户端和连接服务,包括本地sock 通信和大多数基于客户端/服务端工具实现的类似于tcp/ip 的通信。主要完成一些类似于链接处理、授权认证、以及相关的安全方案。在该层上引入了连接池的概念,为通过认证安全接入的客户端提供线程。同样在该层上可以实现基于SSL 的安全链接。服务器也会为安全接入的每个客户端验证它所具有的操作权限。这里面要注意一下连接池,连接池的实现机制大家了解一下:
(1) 程序初始化时创建连接池
(2) 使用时向连接池申请可用连接
(3) 使用完毕,将连接返还给连接池
(4) 程序退出时,断开所有连接,并释放资源
为什么使用连接池,其实和java中线程池的原理一样,无需每次请求都新建连接,而使用数据库连接池负责分配,管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个。
第二层是服务层:主要完成大多数的核心服务功能,如SQL 接口,并完成缓存的查询,SQL 的分析和优化及部分内置函数的执行。所有跨存储引擎的功能也在这一层上实现,如过程,函数等。在该层,服务器会解析并创建相应的内部解析树,并完成相应的优化如确定查询表的顺序,是否利用索引等,最后生成对应的执行操作。如果是select 语句,服务器还会查询内部的缓存。如果缓存空间足够大,这样在解决大量读操作的环境中能够很好的提升系统的性能。
第三层引擎层:也是最重要的一层,在存储引擎层中,存储引擎真正的负责了MySql 中数据的存储和提取,服务器通过API 与存储引擎进行通信。不同的存储引擎具有不同的功能,这样使得我们可以根据自己的实际需求选取合适的存储引擎。MySql 至少十种以上的存储引擎,但是一般我们使用的存储引擎主要是MyISAM 与 InnoDB 。下面主要对比一下各个主流存储引擎(借图):
Mysql系列一(结构)
三:总结
如果大家不是专门向DBA方向发展,我觉得基本的结构知道就好了,主要是理解mysql是如何存储的,本文最主要的目的还是让开发人员更好的应用mysql,知其然而知其所以然,下章会介绍下第三层的存储引擎。