Mysql源代码分析系列(2): 源代码结构

Mysql源代码主要包括客户端程序代码,服务器端代码,测试工具和一些库构成,下面我们对比较重要的目录做些介绍。

  • BUILD
这个目录在本系列的上篇文章中我们仔细看过,内含各种平台的编译脚本,这里就不仔细说了。

  • client
这个目录下有如下比较让人眼熟的文件: mysql.cc, mysqlcheck.c, mysqladmin.cc, mysqlshow.c,等等,如果你编译一下就会发现那些眼熟的程序也出现了,比如mysql。明白了吧,这个目录就是那些客户端程序所在的目录。这个 目录的内容也比较少,而且也不是我们阅读的重点。

  • Docs
这个目录包含了文档。

  • storage
这个目录包含了所谓的Mysql存储引擎 (storage engine)。存储引擎是数据库系统的核心,封装了数据库文件的操作,是数据库系统是否强大最重要的因素。Mysql实现了一个抽象接口层,叫做 handler(sql/handler.h),其中定义了接口函数,比如:ha_open, ha_index_end, ha_create等等,存储引擎需要实现这些接口才能被系统使用。这个接口定义超级复杂,有900多行 :-(,不过我们暂时知道它是干什么的就好了,没必要深究每行代码。对于具体每种引擎的特点,我推荐大家去看mysql的在线文档:  http://dev.mysql.com/doc/refman/5.1/en/storage-engines.html

应该能看到如下的目录:

* innobase, innodb的目录,当前最流行的存储引擎

* myisam, 最早的Mysql存储引擎,一直到innodb出现以前,使用最广的引擎。

* heap, 基于内存的存储引擎

* federated, 一个比较新的存储引擎

* example, csv,这几个大家可以作为自己写存储引擎时的参考实现,比较容易读懂

  • mysys
包含了对于系统调用的封装,用以方便实现跨平台。大家看看文件名就大概知道是什么情况了。

  • sql
这个目录是另外一个大块头,你应该会看到mysqld.cc,没错,这里就是数据库主程序mysqld所在的地方。大部分的系统流程都发生在这里。你还能 看到sql_insert.cc, sql_update.cc, sql_select.cc,等等,分别实现了对应的SQL命令。后面我们还要经常提到这个目录下的文件。

大概有如下及部分:

SQL解析器代码: sql_lex.cc, sql_yacc.yy, sql_yacc.cc, sql_parse.cc等,实现了对SQL语句的解析操作。

"handler"代码: handle.cc, handler.h,定义了存储引擎的接口。

"item"代码:item_func.cc, item_create.cc,定义了SQL解析后的各个部分。

SQL语句执行代码: sql_update.cc, sql_insert.cc sql_select.cc, sql_show.cc, sql_load.cc,执行SQL对应的语句。当你要看"SELECT ..."的执行的时候,直接到sql_select.cc去看就OK了。

辅助代码: net_serv.cc实现网络操作

还有其他很多代码。

  • vio
封装了virtual IO接口,主要是封装了各种协议的网络操作。

  • plugin
插件的目录,目前有一个全文搜索插件(只能用在myisam存储引擎)。

  • libmysqld
Mysql连接库源代码。

  • 开源函数库目录
和所有的开源项目一样,Mysql也使用了一些开源的库,在其代码库中我们能看到dbug、pstack、strings、 zlib等。

多说无益,主要是对于mysql的代码目录有个概念,要找的时候也有个方向。万一要找某个东西找不到了就只能grep了...


上文来自:http://www.cnblogs.com/end/archive/2011/05/18/2050281.html

你可能感兴趣的:(mysql,数据库,源代码,架构)