mysql源码解读——源码介绍

 

一、mysql介绍

数据库行业,特别是关系型数据库行业,在大约二十年前左右,是相当火的,可能现在的搞计算机的体会不深,毕竟各种NoSql和分布式数据库层出不穷。想当年,有一段时间也想当个DBA去外企香一下。会写一手好的Sql语句,实现别人无法实现的功能并且速度更快更安全是面试时的基本要求。
当时能接触到的数据库,老的文件型的就不提了,基本就是几家,如Oracle,DB2,赛贝思等,非常少(微软的SqlServer是后来的,当时认为他只能做中小企业开发应用)。基本上,每个行业就用一个数据库,比如当初电力行业一直就是Oracle,少有的有一两家用DB2,只有开发一些外围功能,偶尔会用SqlServer。
换句话说,少就意味着贵重,Sql2000的免费版无法提供一些强大的功能,只能用来学习和在小场景下的应用,这也导致了一个问题,人们对数据库行业的期房值很高。一个DBA会有非常好的薪水和待遇。特别是Oracle为首的数据库企业,高收费导致很多人根本就不会选择它,而初期它的安装复杂性也导致了大批的开发人员望而却步。
直到MySql出现,才真正解决了这个问题,把数据库行业入门和学习的整体门槛拉了下来,再加上Sql Server不断的进步,二者的配合,基本把大型应用以外的所有领域,特别是互联网行业上,都横扫了一遍。再加上后来互联网企业自己搞分布式大数据开发(谷歌三论文),海量数据的处理,引发了各种数据库的爆发,才真正撼动了Oracle等大型数据库企业的霸主地位。
MySql凭借免费和开源,迅速的切入了互联网行业,而众所周知的是,近二十年是互联网(移动互联网)辉煌的黄金二十年,生逢其时,恰逢其会,所谓,时也,命也!可惜是现在被Oracle收购了,其前景不知道会是什么样子。
MySql是比较早期的C/S架构,即一个MySql服务程序(MySqlId),一个是客户端,前者负责数据库的服务请示的处理和回馈,后者主要是提供连接数据库和命令操作等。
MySql提供支持的存储引擎很多,但主要用的有如下三种:
1、MyISAM
对ISAM存储引擎进行扩展。在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。MyISAM拥有较高的插入、查询速度,但不支持事物。
2、InnoDB(默认)
此引擎为MySql默认的存储引擎选项,提供了事务安全表(ACID),行锁定和外键。它具有提交、回滚和崩溃恢复能力的事物安全(ACID兼容)的强大功能,能够支持巨大数量数据的高性能应用。
3、Memory
类似于Redis,存储数据到内存中,主要是为了提供快速操作。

mysql源码解读——源码介绍_第1张图片

mysql_list

二、源码的结构

源码的下载可以在:https://dev.mysql.com/downloads/mysql/
在网页上“SelectOperating System”选择“SourceCode”,在“Select OS Version”选项中使用“All”,即可出现下面的列表:

mysql源码解读——源码介绍_第2张图片

mysql_source

点击“Download”,进入新页面后选择“No thanks, just start my download.”,直接下载即可,根据网速,二百多兆的数据不大也不小。下载后,解压缩,即可出现代码,基本结构如下:

mysql源码解读——源码介绍_第3张图片

mysql_dic

代码的主要功能如下:
boost:这个版本是自带Boost的库相关文件的,放在此处,如果是其它的版本就没有这个文件夹
client:客户端相关的软件和工具代码
cmake:CMAKE相关的脚本命令文件
components:组件工具
Docs:文档文件夹
doxyen_resources:doxyen工具相关资源
extra:引入的一些其它包,如网络消息谁的SSL包以及一些小工具。
include:源码用的相关的头文件放置的文件夹,但不包括存储引擎的头文件。
libbinlogevents:解析Binlog的lib服务,5.7后提供。
libbinlogstandalone:脱机配置CMAKE
libmysql:可嵌入式的客户端API
libservices:动态服务插件管理
man:帮助文档
mysql-test:服务端mysqlid的测试工具。
mysys:MySql自己实现的数据结构和一些基本算法。如数组和链表等。
packaging:打包相关
plugin:插件管理文件夹,包括一些动态加入的插件。
router:集群路由
scripts:系统工具运行的脚本。
share:共享信息,err和字符集
source_downloads:
sql:服务端的主要代码,包括main函数。
sql-common:服务端和客户端通用的一些代码。
storage:存储引擎相关文件。
strings:字符串库
support-files:.conf的示例文件和相关工具。
testclients:客户框架测试。
unittest:单元测试,这个搞程序的都知道。
utilities:公用的一些文件,有ZLIB等
vio:虚拟网络IO处理系统,不同平台或不同协议的网络通信API的二次封装。

三、体系结构

MySql的体系结构主要如下:

mysql源码解读——源码介绍_第4张图片

mysql_construct

其主要分为以下几层:
1、连接管理层,包括连接池支持的各种组件
2、服务管理层,含管理服务和相关工具、接口、分析、优化等组件。
3、存储引擎,含各种以插件提供的数据存储引擎。
4、文件存储层,含各种实际落到硬盘的物理文件。

四、总结

Mysql+PHP想当初可是在互联网横扫过一段时间,“PHP是世界上最好的语言”这个梗大家应该都知道,MySql的优势是不言而喻的,机会也是不用说的,都遇到了,自然就会飞起。其实数据库的原理科班出身的都学过,但是怎么写出一个成熟的商业产品,是国内的大佬儿们缺少的。至少到目前为止,国产的能拿的出手并且应用比较广泛的,仍然是少之又少。这也是国内写数据库开发者的悲哀,越是无法深入到软件底层,越是对开发者的要求低,就是越是卡各种年龄和其它的无关的要求。
希望能从阅读学习优秀的开源数据库软件代码,把人家的思想学进来,这才是重中之重!买办思想,救不了国内的数据库软件!
另:MySql的安装配置以及应用不在本文范畴,可去网上查找相关资料。

mysql源码解读——源码介绍_第5张图片

 

你可能感兴趣的:(数据库开发,mysql)