如何阅读mysql源代码_我是如何开始阅读MySQL源码的?
1. 为什么要阅读MySQL源码?
mysql怎么读英语之前已经看过 ⾼性能MySQL 和 MySQL技术内幕InnoDB存储引擎, 但总觉得只是看看书上这么说还是不够.
⽐如 ⾼性能MySQL ⾥画的有B-Tree索引的⽰意图,可是B-Tree索引究竟长什么样⼦,在MySQL⾥是怎么存储的,没什么概念; ⾥边还提到关联查询的”泳道图”,在代码层⾯到底是怎么执⾏的,也不清楚.
record的汉语意思是什么2. 从哪⼉开始?
直接看MySQL的源码有点困难.
switch怎么写程序框图好在有⼀本讲MySQL的书, 叫 Understanding.MySQL.Internals, 书虽然有点⽼,但看起来是个不错的开始.
⼤概过⼀下书的内容,发现⼤部分内容还是看不下去. 只有第4章 Client/Server Communication 还能看.
3. Protocol
matlab中plot函数紫
美国特斯拉事件Understanding.MySQL.Internals 的第4章 Client/Server Communication 讲了MySQL Server和客户端沟通的协议, 结合着wireshark, 很快就能搞明⽩.
4. main() -> mysqld_main()
MySQL是由C++写的,⼊⼝函数main()直接调⽤了mysqld_main().
Server启动的代码都在这⾥,⼤部分都看不懂.
直到最后的 handle_connections_sockets().
5. handle_connections_sockets()
读过UNP的看这部分代码应该都没问题.
poll()
accept()
thread_scheduler->add_connection()
pthread_create() or thead_cache
handle_one_connection()
for (;;) {
while (connection_alive()) {
do_command();
}
cache_thread();
}
do_command() -> dispatch_command()
6. dispatch_command()
这⾥已经能够看到很多熟悉的词语了,CHANGE_USER,STMT_EXECUTE,STMT_FETCH.
不过最关键的执⾏SQL语句的部分, COM_QUERY, 看不懂.
mysql_parse() -> MYSQLparse()
Understanding.MySQL.Internals 的第9章 Parser and Optimizer, 是讲这部分的.
在Parse Tree部分有提到SQL语句最终在 mysql_execute_command() ⾥执⾏.
7. mysql_execute_command()
html网站首页文件名case SQLCOM_CREATE_DB: mysql_create_db();
case SQLCOM_CREATE_TABLE: mysql_create_table();
case SQLCOM_INSERT: mysql_insert();
case SQLCOM_SELECT: execute_sqlcom_select();
mysql_create_db()好理解.
mysql_create_table()⾥有创建⼀个.frm⽂件,要是有⽂档说明下.frm⽂件的格式就好了.
从这往篇⽂档可以看出, MySQL的历史真的太久了,官⽅⽂档对很多字段的说明都是always, ??.
看了这个⽂档还是搞不明⽩.frm⽂件的格式.
8. .MYD and .MYI
由于之前看过InnoDB技术内幕,显然InnoDB⽐MyISAM要复杂多了.
MySQL Internals Manual ⾥边有⼀章讲MyISAM的,仔细分析了.MYD和.MYI⽂件的格式,讲的挺清楚的. .MYD的⽂件格式挺简单的.
.MYI的就复杂很多了. 对着⽂档写个⼩程序读取并解析.MYI⽂件,有很⼤帮助.
搞清楚了.MYD和.MYI的⽂件格式,很多名词术语也混个脸⼉熟了.
回过头来再看.frm.
9. .frm
创建.frm⽂件的代码在 mysql_create_frm() ⾥.
努⼒⼀番后,再写个⼩程序读取并解析下.frm⽂件,总算搞清楚其格式了.
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论