欢迎光临
我们一直在努力

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源码解读——源码介绍

mysql_list

二、源码的结构

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

mysql源码解读——源码介绍

mysql_source

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

mysql源码解读——源码介绍

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源码解读——源码介绍

mysql_construct

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

四、总结

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

mysql源码解读——源码介绍

  • 海报
海报图正在生成中...
赞(0) 打赏
声明:
1、本博客不从事任何主机及服务器租赁业务,不参与任何交易,也绝非中介。博客内容仅记录博主个人感兴趣的服务器测评结果及一些服务器相关的优惠活动,信息均摘自网络或来自服务商主动提供;所以对本博客提及的内容不作直接、间接、法定、约定的保证,博客内容也不具备任何参考价值及引导作用,访问者需自行甄别。
2、访问本博客请务必遵守有关互联网的相关法律、规定与规则;不能利用本博客所提及的内容从事任何违法、违规操作;否则造成的一切后果由访问者自行承担。
3、未成年人及不能独立承担法律责任的个人及群体请勿访问本博客。
4、一旦您访问本博客,即表示您已经知晓并接受了以上声明通告。
文章名称:《mysql源码解读——源码介绍》
文章链接:https://www.456zj.com/24402.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址