天天看點

《MySQL技術内幕:InnoDB存儲引擎第2版》——1.2 MySQL體系結構

由于工作的緣故,筆者的大部分時間需要與開發人員進行資料庫方面的溝通,并對他們進行教育訓練。不論他們是dba,還是開發人員,似乎都對mysql的體系結構了解得不夠透徹。很多人喜歡把mysql與他們以前使用的sql server、oracle、db2作比較。是以筆者常常會聽到這樣的疑問:

?為什麼mysql不支援全文索引?

?mysql速度快是因為它不支援事務嗎?

?資料量大于1000萬時mysql的性能會急劇下降嗎?

……

對于mysql資料庫的疑問有很多很多,在解釋這些問題之前,筆者認為不管對于使用哪種資料庫的開發人員,了解資料庫的體系結構都是最為重要的内容。

在給出體系結構圖之前,使用者應該了解了前一節提出的兩個概念:資料庫和資料庫執行個體。很多人會把這兩個概念混淆,即mysql是資料庫,mysql也是資料庫執行個體。這樣來了解oracle和microsoft sql server資料庫可能是正确的,但是這會給以後了解mysql體系結構中的存儲引擎帶來問題。從概念上來說,資料庫是檔案的集合,是依照某種資料模型組織起來并存放于二級存儲器中的資料集合;資料庫執行個體是程式,是位于使用者與作業系統之間的一層資料管理軟體,使用者對資料庫資料的任何操作,包括資料庫定義、資料查詢、資料維護、資料庫運作控制等都是在資料庫執行個體下進行的,應用程式隻有通過資料庫執行個體才能和資料庫打交道。

如果這樣講解後讀者還是不明白,那這裡再換一種更為直白的方式來解釋:資料庫是由一個個檔案組成(一般來說都是二進制的檔案)的,要對這些檔案執行諸如select、insert、update和delete之類的資料庫操作是不能通過簡單的操作檔案來更改資料庫的内容,需要通過資料庫執行個體來完成對資料庫的操作。是以,使用者把oracle、sql server、mysql簡單地了解成資料庫可能是有失偏頗的,雖然在實際使用中并不會這麼強調兩者之間的差別。

好了,在給出上述這些複雜枯燥的定義後,現在可以來看看mysql資料庫的體系結構了,其結構如圖1-1所示(摘自mysql官方手冊)。

《MySQL技術内幕:InnoDB存儲引擎第2版》——1.2 MySQL體系結構

從圖1-1可以發現,mysql由以下幾部分組成:

?連接配接池元件

?管理服務和工具元件

?sql接口元件

?查詢分析器元件

?優化器元件

?緩沖(cache)元件

?插件式存儲引擎

?實體檔案

從圖1-1還可以發現,mysql資料庫差別于其他資料庫的最重要的一個特點就是其插件式的表存儲引擎。mysql插件式的存儲引擎架構提供了一系列标準的管理和服務支援,這些标準與存儲引擎本身無關,可能是每個資料庫系統本身都必需的,如sql分析器和優化器等,而存儲引擎是底層實體結構的實作,每個存儲引擎開發者可以按照自己的意願來進行開發。

需要特别注意的是,存儲引擎是基于表的,而不是資料庫。此外,要牢記圖1-1的mysql體系結構,它對于以後深入了解mysql資料庫會有極大的幫助。