2012年11月12日

MySQL源代码解读(二)

摘要: 引言本文主要介绍Mysql主要的调用流程,将从代码的角度来看一个从用户发出的"select * from test" SQL命令在服务器内部是如何被执行的。从我个人的经验来看,阅读理解大规模项目的代码最重要的两个方面,一是了解主要的数据结构,二是了解数据流,在这里主要是调用流程。把这两个主线把握住以后,大部分代码都是比较容易阅读的,Mysql的源代码属于比较好读的类型,因为函数的调用关系比较明确。难读的代码一般都充斥着大量的回调、异步调用,很可能你极难找到某个函数在哪里或什么时候被调用了。当然,算法的实现代码也很难读。幸好Mysql不是那种难读的类型,所以我们也不要害怕,大 阅读全文

posted @ 2012-11-12 21:27 JohnChain 阅读(1382) 评论(0) 推荐(0) 编辑

MySQL源代码解读(一)

摘要: MySQL启动流程主要代码在sql/mysqld.cc中,精简后的代码如下:int main(int argc, char **argv) //标准入口函数MY_INIT(argv[0]);//调用mysys/My_init.c->my_init(),初始化mysql内部的系统库logger.init_base(); //初始化日志功能init_common_variables(MYSQL_CONFIG_NAME,argc, argv, load_default_groups) //调用load_defaults(conf_file_name, groups, &argc, &a 阅读全文

posted @ 2012-11-12 20:49 JohnChain 阅读(2890) 评论(0) 推荐(0) 编辑

mysql 运行概图

摘要: 接着进入Commander Dispatcher模块,命令分发模块,大概就是一个switch case的过程,根据不同的命令,进行不同的操作。这个模块又会间接关联到Query Cache模块和Logging Module,即查询缓存模块和日志模块。Query Cache模块个人感觉至少包含结果集缓存模块,至于有木有执行计划缓存,这个就不清楚了,还需要进入源码慢慢看来。Logging Module就是传说中的日志了,日志包括redo和undo两方面吧,日志系统是一个database必备的,是实现事务特性的重要手段,而事务便是 database和file system的根本区别,不要小瞧了Log. 阅读全文

posted @ 2012-11-12 20:31 JohnChain 阅读(331) 评论(0) 推荐(0) 编辑

Yacc 与 Lex

摘要: Ashish Bansal (abansal@ieee.org), 软件工程师, Sapient 公司简介:Lex 和 Yacc 是 UNIX 两个非常重要的、功能强大的工具。事实上,如果你熟练掌握 Lex 和 Yacc 的话,它们的强大功能使创建 FORTRAN 和 C 的编译器如同儿戏。Ashish Bansal 为您详细的讨论了编写自己的语言和编译器所用到的这两种工具,包括常规表达式、声明、匹配模式、变量、Yacc 语法和解析器代码。最后,他解释了怎样把 Lex 和 Yacc 结合起来。Lex 代表 Lexical Analyzar。Yacc 代表 Yet Another Compile 阅读全文

posted @ 2012-11-12 15:13 JohnChain 阅读(262) 评论(0) 推荐(0) 编辑

导航