我学过数据结构的人,也看过数据库管理系统实现一书,我总是觉得hash表这个东西说来简单,但却似乎没有什么用途。不过在我粗粗了解了postgresql的实现之后,不能不惊呼,hash表真是太有用了!如果你没有写过hash表的实现算法,建议你一定要认真读读postgresql的内存hash表的实现代码。读这部分代码花了我两个多星期,中间还因为上班迟到被老板k了一顿,但是读懂以后我觉得非常的快乐,从理论到实现再到应用,全部都走一遍,哈哈,爽!
这部分代码的关键之处在于它实现的是可动态增长hash表,很容易知道,有两种动态hash表,那么,postgresql实现的是哪一种呢?
首先说查询优化主要所涉及的数据类型:
.\SRC\INCLUDE\NODES中的几个文件均包括了
----> ParseNodes.H 语法分析之后所形成数据结构的类型 ----> PlanNodes.H 这个是经过优化之后的查询计划数据结构的类型 ----> ExecNodes.H 这个是执行器在执行查询计划时使用的数据结构的类型
等等,可以说,数据库系统执行的主线,主要就是这几个数据结构的生成和转换。
然后说几个主要的入口点:
Pgl的Core的几个主要的入口点都在:
.\SRC\BACKEND\EXECUTOR\SPI.C 中,所谓的SPI就是“Server Programming Interface”(服务器编程接口)
比如:_SPI_execute主要是由SQL语句转换为AccessPlan
就主要的查询语句而言:_SPI_execute调用了
pg_parse_and_rewrite :这个是SQL语句语法分析,语义检查和基于规则的重写。 planner:这个是Pgl查询优化器的入口点。 (当然pg_parse_and_rewrite进一步调用了pg_parse_query和pg_analyze_and_rewrite,而pg_analyze_and_rewrite调用了parse_analyze和QueryRewrite)
而: _SPI_execute_plan 则主要是对AccessPlan的执行
基本框架差不多就是这样了
·如果你的linux安装盘不止一张光盘,那么可能其中一张会带有postgresql的源代码
·我通常直接到http://www.postgresql.org/或者ftp://ftp.postgresql.org/pub/下载源代码
·可以用教育网的天网搜索引擎http://e.pku.edu.cn搜索postgresql来寻找国内的下载站点,不过这些下载站点多属于教育网,我们访问起来有点慢
摘自:linuxforum.net