數據庫引擎學習導讀

因爲目前項目涉及到數據庫查詢引擎的實現,所以近來愈發覺得數據庫引擎開發是一個很好的技術領域。首先,一個數據庫引擎與傳統編譯器很像,可以細分爲三大部分,前端、中端和後端。所謂前端,就是一個SQL解析器把用戶的SQL語句轉換成語法樹(Parse Tree或者叫Concrete Syntax Tree,CST),然後在執行語義檢查的同時將其轉換成中端所需的輸入——抽象語法樹(Abstract Syntax Tree,AST)。中端拿到的AST其實就是我們常說的邏輯執行計劃(Logical Plan),中端也就叫做Logical Planner。Logical Plan中已經去掉了沒用的細節,比如標點符號、括號等,只保留了最終執行所需的語法部分。而Logical Planner最重要的任務就是進行關係代數(Relational Algebra)優化,比如SELECT和WHERE(對應關係模型中的Projection和Selection)中條件的“Push Down”,將其儘可能地移動到AST中越低的位置越好,因爲這樣可以有效減少載入到內存中的數據量。經過這樣的優化後,中端將Logical Plan交給後端進行Physical Planning,即將Logical Plan中每個抽象的邏輯運算符轉換成真正可以執行的物理運算符,比如JOIN變成HashJoin,決定要不要使用臨時表存儲中間結果等等。此外,最終執行時還要確定數據是都在本機還是分片到多臺機器,是否要進行分佈式執行。最終,最優的Physical Plan就可以執行出用戶想要的結果了。

經過前面這樣快速地過了一下數據庫引擎的三大塊,可能大家已經能夠感受到它非常“硬核”的一面。

  1. 前端重度依賴編譯原理的知識,需要開發者瞭解如何定義語法,如何進行語義檢查。如果是Java開發的話,一般最流行的選擇就是ANTLR,自動生成詞法和語法解析器(Lexer和Parser)。
  2. 中端則需要深厚的關係理論(Relational Theory,RM)做支撐,理解關係理論的用處,其背後的謂詞邏輯系統和推導規則,這些都是Logical Plan優化所需的知識。
  3. 後端則是一直最流行的大數據、多線程、分佈式計算等熱點領域。

作爲一個剛入門的數據庫內核開發者來說,這個學習的過程是非常幸福的,因爲這裏面涉及到的都是計算機科學裏最硬核的部分。通過解剖一個數據庫內核,也讓自己反思平時自己寫的代碼哪裏可以提高。比如開發一個系統或者模塊,最重要的是定義好自己的“語言層”。SICP裏講用LISP開發,首先就是根據領域用LISP定製一套語言,然後再實現功能。對於應用開發來說,這個語言可能只是一套Java的API,而不是一個真正的語言,但這裏的道理是一定要明白自己的系統能支持哪些、不能支持哪些。

如果不限於計算機科學領域,繼續擴展的話,編譯原理則與語言密切相關(這裏的語言並不限於編程語言)。而關係理論的背後則是所謂的四值謂詞邏輯系統(關係理論之父Codd自己的話,RM強就強在這),RM本質上是一個Abstract Machine,這裏面隱含着邏輯與計算的微妙關係。此外,查詢優化器的實現還涉及到概率統計以及Physical Plan空間的搜索,基本算法有動態規劃、貪心算法等,在PostgreSQL中還用到了遺傳算法。所以,前面說到的這些領域繼續深入學習的話,也是非常有樂趣的。當然,每個開發者的領域不同,不能大家都做一樣的項目。但這裏強烈建議感興趣的同學業餘時間學習一下數據庫理論方面的知識,而不是停留在會寫簡單的SQL,數據庫內核裏隱藏的一塊寶藏!

推薦閱讀材料,按照由淺入深的順序,大部分應該在網上都能找到電子版:

  1. 《Database Systems: the Complete Book》:一本百科全書式的教材,涉及數據庫理論的方方面面。如果只關心本文所講的引擎部分的話,想跳過數據庫設計、範式等其他內容的話,也可以看一下同作者寫的《Database System Implementation》,全書都是乾貨。
  2. 《Applied Mathematics for Database Professionals》:本書可以用來了解數據庫理論之下的數學知識,包括邏輯、集合論和關係理論。此書對新手非常友好,淺顯易懂。
  3. 《Database in Depth: Relational Theory for Practitioners》:關係理論之父的好友CJ.Date所著,Date的產量驚人,出了很多本關於關係理論的書,有些可能比較重疊,所以重點看幾本就好。
  4. 《The Relational Model for Database Management, Version 2》:可能是關係理論之父出版的唯一一本給我們普通人看的書,其他基本都是Paper或學術雜誌。建議在看其他書的同時或者最後看此書,因爲需要對關係理論有了一定了解,追本溯源,在創造者這才能讀懂他的想法。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章