程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> Mysql源碼學習——八度空間

Mysql源碼學習——八度空間

編輯:MySQL綜合教程

 

學習完詞法分析和語法分析後,開始進入Mysql源碼的正式學習之旅了。這麼多模塊,腫麼入手呢?!還好從網上搜到了一個模塊劃分,以後就盡可能根據這個模塊劃分一步一步的跟蹤源碼,揭開Mysql的面紗。

<script></script>

 

 

      我們從上至下來看各個模塊的劃分,首先客戶端發送請求與服務器連接,通過connection manager模塊,連接管理模塊會調用Thread Manager模塊,即線程管理模塊,這裡會為一個連接創建一個新的線程,專門為這個連接服務,這就保證了每個連接都有一個獨立的線程為之工作,當然連接數一般也會有個限制,不然無限制的創建新的線程,操作系統也頂不住啊。接著進入了User Module,用戶模塊,這個模塊應該是身份識別認證階段,說白了就是檢查用戶名密碼,當然應該還包括權限檢查(只有自主訪問控制,Mysql不像Oracle,不支持role,更不用說label了。這就是簡約而不簡單吧,^_^)。

 

      上面的三個模塊就是登錄過程中必須經歷的階段。connection manager為客戶端和服務器創建連接,thread manager為新建的連接分配一個獨立的線程,user Module進行身份認證。oh yeah~~

 

      接著進入Commander Dispatcher模塊,命令分發模塊,大概就是一個switch case的過程,根據不同的命令,進行不同的操作。這個模塊又會間接關聯到Query Cache模塊和Logging Module,即查詢緩存模塊和日志模塊。Query Cache模塊個人感覺至少包含結果集緩存模塊,至於有木有執行計劃緩存,這個就不清楚了,還需要進入源碼慢慢看來。Logging Module就是傳說中的日志了,日志包括redo和undo兩方面吧,日志系統是一個database必備的,是實現事務特性的重要手段,而事務便是database和file system的根本區別,不要小瞧了Logging Module啊!!

 

      命令分發模塊,根據命令的性質,將命令分給不同的子模塊。SELECT分配給Optimizer即優化模塊,一條select語句最重要的就是執行計劃了,一個好的執行計劃比一個壞的執行計劃不知道要快多少倍,這就是為什麼我們要建立索引,其實在經常查詢的列上建立二級索引,就是為了改變執行計劃,讓執行計劃可以選擇二級索引,而拋棄聚簇索引(當然不是完全拋棄,聚簇索引是根本)。UPDATE、INSERT、DELETE交給Table Modification Module,不看也知道,這個模塊主要是處理數據更新了(這裡所說的更新是指數據的改變,即UID)。Repairs分配給了Table Maintenance Module,字面意義是說表維護模塊,我OUT了,默認表壞了,支持修復?是何種壞了?不太了解啊…。Replication分配給了Replication Module,就是復制模塊。最後一個是Status分配給了Status Reporting Module,這個我貌似接觸過,是不是所謂的那些動態試圖?比如查看系統當前狀態下的鎖資源的占用情況等,這個模塊應該是性能分析者居家旅行必備的模塊吧,通過這個模塊可能很快找到系統性能的瓶頸。

 

      上面的模塊又統一走到Access Control Module,訪問控制模塊啊,原來上面所說的User Module不包含訪問控制…,這個訪問控制就是簡單的DAC,即檢查用戶是否對要訪問的對象具有增、刪、改、查的權限。接著進入Table Manager模塊,因為Mysql支持不同的存儲引擎,而這個模塊是個統一的模塊,個人感覺這個應該是表的字典對象管理模塊,即表的一些元數據,比如這個表包含哪些列啊,各個列的類型,表的創建者,創建日期,表的存儲引擎之類的信息。最下面是Abstract Storage Engine Module,即抽象存儲引擎模塊,Mysql的保持這麼多存儲引擎同時在服務器中,是通過一個handler抽象類實現的(不知道有木有抽象類的概念,小弟C++、JAVA丟了很久了…),每個存儲引擎按照規定的接口,實現一個具體的handler類,然後再調用的時候,根據上面的Table Manager模塊中的存儲引擎的信息,選擇對應的handler類進行相應表的物理操作。

 

      看了這個模塊圖,感覺思路清晰了很多。下面就一步一步的學習每個模塊,當然這些模塊之間也是一個執行流程順序執行的過程。今天就寫到這了,下次開始學習第一個模塊:Connection Manager

 

      PS. 貌似最近沒這麼忙了,加班加了好幾個月終於算是稍微輕松了一點。以後把更多的業余時間放在讀書學習上。

 

      PS again. 每天下班腦子都一鍋粥了,回來寫點博客權當放松啦,標題的八度空間是JAY的專輯名啦,借此來比喻Mysql的各個模塊^_^

 


摘自 心中無碼

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved