zoukankan      html  css  js  c++  java
  • 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了...
  • 相关阅读:
    第二阶段冲刺总结09
    第二阶段冲刺总结08
    第二阶段冲刺总结07
    51nod 1799 二分答案(分块打表)
    51nod 1574 排列转换(贪心+鸽巢原理)
    Codeforces 618D Hamiltonian Spanning Tree(树的最小路径覆盖)
    Codeforces 627D Preorder Test(二分+树形DP)
    BZOJ 2427 软件安装(强连通分量+树形背包)
    BZOJ 2467 生成树(组合数学)
    BZOJ 2462 矩阵模板(二维hash)
  • 原文地址:https://www.cnblogs.com/end/p/2050281.html
Copyright © 2011-2022 走看看