我學過數據結構的人,也看過數據庫管理系統實現一書,我總是覺得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