+
 新版

如何看懂mysql源码?

SXZC 发布于 2013/09/26 15:31
阅读 4K+
收藏 1
想通过学习MYSQL源码,来学习mysql;并从中了解大型C开发软件的模式,哪位神给指点一下?
加载中
3
狮子的魂
狮子的魂

大型系统的架设有一个我们都知道的原则: 模块化, 这个MySQL源码里面可以清晰的看到.

MySQL里面有几个重要的模块: 

1. MySQL内核模块: 

源码文件夹: mysys

作用: 主要提供了MySQL的网络API, 加密API, 线程/进程API, 以及锁定和内存管理API, 排序API, 压缩解压API, 存储分页API等等

2.  SQL模块:

源码文件夹: sql

作用: 这个好说: sql的解析,存储,以及一些所需的API.

3. Storage存储引擎模块: 

源码文件夹: storage.

作用: MySQL的各种存储引擎源码全部在这里: 典型的myisam和innodb引擎源码分别在: storage/mysiam和storage/innobase下...

4. 字符串模块:

源码文件夹: strings

作用: 很多的高效字符串API改写都在这个源码包里面. 例如: 字符串的查找, string和int的相互转换等等

5. 正则模块: 

源码文件夹: regex.

作用: 正则的解析和执行API.

6. zlib压缩模块:

源码文件夹: zlib

典型的zlib模块.

另外还有很多其他的非核心模块: 例如: cmd客户端(cmd-line-utils), 配置解析(config), 文档(Docs), 接口头文件(include), 测试(tests), 单元测试(unittest), 基本客户端工具(client)......


阅读如何入手呢?

看你重点想了解那部分功能了: 例如想了解MySQL的索引, 就可以看看存储引擎.

想知道sql的解析就可以看看sql模块. 想知道网络处理(nio,线程池...)就可以看看mysys模块.


有一个不错的方式就是: 自己去编译安装下mysql, 并且依据里面的测试例子, 来自己动手调用mysql的API, 然后依据函数调用关系你就可以知道一次mysql请求到底是调用了哪些模块来完成的了. 只要知道了执行的顺序, 就好看源码了... (crud区分下)

1
算法与编程之美
算法与编程之美
遇到问题解决问题,不要为了源码而源码。解决问题的时候可以深入源码,更深层次的了解问题出现的根因。
0
Muscle_Mo
Muscle_Mo
你觉得这个方式是不是起点太高了呢?
0
SXZC
SXZC

只要努力,高不是问题。

0
SXZC
SXZC

谢谢!

0
王瑞平
王瑞平
听到想看懂源码就头疼
0
虚无道长
虚无道长
看nginx了解大型C开发软件模式会不会好点?代码10w+
0
j
jchtc
lz这样拉风的人,应该很牛b,俺等小弟只能嫉妒的份,你应该看mariadb的源码,现在wikipeida和google已经抛弃了mysql转向mariadb了,lz应该与时俱进。站在世界的最前面,引导着人类的进步做出巨大贡献。
0
南湖船老大
南湖船老大

mysql的代码混乱那是世人皆知,楼主看这完全是扯淡。

最最推荐的是看nginx,没有之一。

0
赵云30
赵云30

引用来自“狮子的魂”的答案

大型系统的架设有一个我们都知道的原则: 模块化, 这个MySQL源码里面可以清晰的看到.

MySQL里面有几个重要的模块: 

1. MySQL内核模块: 

源码文件夹: mysys

作用: 主要提供了MySQL的网络API, 加密API, 线程/进程API, 以及锁定和内存管理API, 排序API, 压缩解压API, 存储分页API等等

2.  SQL模块:

源码文件夹: sql

作用: 这个好说: sql的解析,存储,以及一些所需的API.

3. Storage存储引擎模块: 

源码文件夹: storage.

作用: MySQL的各种存储引擎源码全部在这里: 典型的myisam和innodb引擎源码分别在: storage/mysiam和storage/innobase下...

4. 字符串模块:

源码文件夹: strings

作用: 很多的高效字符串API改写都在这个源码包里面. 例如: 字符串的查找, string和int的相互转换等等

5. 正则模块: 

源码文件夹: regex.

作用: 正则的解析和执行API.

6. zlib压缩模块:

源码文件夹: zlib

典型的zlib模块.

另外还有很多其他的非核心模块: 例如: cmd客户端(cmd-line-utils), 配置解析(config), 文档(Docs), 接口头文件(include), 测试(tests), 单元测试(unittest), 基本客户端工具(client)......


阅读如何入手呢?

看你重点想了解那部分功能了: 例如想了解MySQL的索引, 就可以看看存储引擎.

想知道sql的解析就可以看看sql模块. 想知道网络处理(nio,线程池...)就可以看看mysys模块.


有一个不错的方式就是: 自己去编译安装下mysql, 并且依据里面的测试例子, 来自己动手调用mysql的API, 然后依据函数调用关系你就可以知道一次mysql请求到底是调用了哪些模块来完成的了. 只要知道了执行的顺序, 就好看源码了... (crud区分下)

高手!
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部