一、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_list

二、源码的结构

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

mysql_source

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

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_construct

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

四、总结

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

mysql源码解读——源码介绍相关推荐

  1. python库源码分析_python第三方库Faker源码解读

    源码背景 Faker是一个Python第三方库,GITHUB开源项目,主要用于创建伪数据创建的数据包含地理信息类.基础信息类.个人账户信息类.网络基础信息类.浏览器信息类.文件信息类.数字类 文本加密 ...

  2. php artisan code,源码解读 Laravel PHP artisan config:cache

    再来一篇源码解读系列,其实包含本篇 config:cache 源码解读在内,这三篇的源码解读都是跟线上环境部署 Laravel 项目有关,因为我们通常会使用这三个 artisan 命令来提高项目的执行 ...

  3. mysql8.0源代码解析_源码解读:MySQL 8.0 InnoDB无锁化设计的日志系统

    原标题:源码解读:MySQL 8.0 InnoDB无锁化设计的日志系统 作者介绍 张永翔,现任网易云RDS开发,持续关注MySQL及数据库运维领域,擅长MySQL运维,知乎ID:雁南归. MySQL ...

  4. MySQL内核源码解读-SQL解析之解析器浅析

    MYSQL服务器接收SQL格式的查询,首先要对sql进行解析,内部将文本格式转换为二进制结构,这个转换就是解析器,解析的目的是为了让优化器更好的处理指令,以便以最优的路径,最少的耗时返回我们想要的结果 ...

  5. Mybatis源码解读-设计模式总结

    虽然我们都知道有26个设计模式,但是大多停留在概念层面,真实开发中很少遇到,Mybatis源码中使用了大量的设计模式,阅读源码并观察设计模式在其中的应用,能够更深入的理解设计模式. Mybatis至少 ...

  6. php yii框架源码,yii 源码解读

    date: 2017-11-21 18:15:18 title: yii 源码解读 本篇博客阅读指南: php & 代码提示: 工欲善其事必先利其器 yii 源码阅读指南: 整体上全貌上进行了 ...

  7. Bert系列(二)——源码解读之模型主体

    本篇文章主要是解读模型主体代码modeling.py.在阅读这篇文章之前希望读者们对bert的相关理论有一定的了解,尤其是transformer的结构原理,网上的资料很多,本文内容对原理部分就不做过多 ...

  8. Bert系列(三)——源码解读之Pre-train

    https://www.jianshu.com/p/22e462f01d8c pre-train是迁移学习的基础,虽然Google已经发布了各种预训练好的模型,而且因为资源消耗巨大,自己再预训练也不现 ...

  9. PyTorch 源码解读之即时编译篇

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 作者丨OpenMMLab 来源丨https://zhuanlan.zhihu.com/ ...

  10. Alamofire源码解读系列(九)之响应封装(Response)

    本篇主要带来Alamofire中Response的解读 前言 在每篇文章的前言部分,我都会把我认为的本篇最重要的内容提前讲一下.我更想同大家分享这些顶级框架在设计和编码层次究竟有哪些过人的地方?当然, ...

最新文章

  1. 飘逸的python - property及实现lazy property
  2. 程序员如何才能提高自己?通过一次重构代码讲解自己的感受【有代码比较】...
  3. 通过 “函数对象”看javascript函数
  4. sql service 从创建访问用户到数据库访问 【SQL】
  5. tcp服务器客户端状态图
  6. RTSP、RTMP和HTTP协议的区别
  7. js php 分段上传文件,php+js实现文件分块上传
  8. Thread.sleep() / Object.wait() / Condition.await() / LockSupport.park() / LockSupport.unpark() 区别
  9. maven 阿里云的镜象
  10. Java基础复习——访问权限
  11. python 递归函数_Python教程系列之递归函数与匿名函数调用
  12. Windows操作系统 | Visual C++库可不能乱删
  13. How to Root Nexus 5 on Android 4.4.4 KTU84P and Install CWM Recovery
  14. 计算机怎样操作看出上网记录,如何查看电脑上网记录_如何查看电脑上网时间...
  15. ArcGIS教程 - 9 矢量数据空间分析
  16. ABB工业机器人程序编写与实战
  17. linux上的网络相关命令行
  18. FOC电机控制,出售一份基于国产M0核MCU平台
  19. 二维数组中的查找--元素从左到右递增,从上到下递增
  20. 用计算机寻找规律,用计算器找规律练习题

热门文章

  1. 原生js预览ofd文件
  2. Java 将Word转为OFD
  3. 汉字编码原则及0XA1与0X80代表的含义。(汉字编码原则为转发)
  4. 杰魔(Geomagic Design)逆向工程软件学习0-产品逆向工程介绍
  5. 易语言5.4一键破解工具
  6. 三维重建开源项目汇总
  7. 结构体内存对齐(如何计算结构体的大小)
  8. lightblue使用教程_使用LightBlue Bean和IFTTT自动化LIFX灯
  9. 【读书笔记】商业自传-PayPal程序员-硅谷钢铁侠-埃隆·马斯克,SpaceX CEO、特斯拉公司CEO、太阳城公司董事会主席。
  10. 关于中标麒麟系统出现“网络管理器未响应”这件事的解决办法