Mysql engine及說明

  1. Mysql 邏輯架構
    sql

    a. 最上層是一些客戶端和鏈接服務,包括本地socket通和大多數基於客戶端/服務器工具實現的相似於tcp/ip的通訊。主要完成一些相似於鏈接處理,受權認證,及相關的安全方案。在該層上引入了線程池的概念,爲經過認證安全接入的客戶端提供線程。一樣在該層上能夠實現基於SSL的安全鏈接。服務器也會爲安全接入的每一個客戶端驗證它所具備的操做權限。數據庫

    b. 第二層結構主要完成大多少的核心服務器功能,如SQL接口,並完成緩存查詢,SQL的分析和優化及部份內置函數的執行。全部跨存儲引擎的功能也在這一層實現,如過程,函數等。在該層上,服務器會解析查詢並建立相應的內部解析樹,並對其完成相應的優化如肯定查詢表的順序,是否利用索引等,最後生成相應的執行操做。若是是select語句,服務器還會查詢內部的緩存。若是緩存空間足夠大,這樣在解決大量讀操做的環境中可以很好的提高系統的性能。 緩存

    c. 存儲引擎層,存儲引擎真正的負責了MySQL中數據的存儲和提取,服務器經過API與存儲引擎進行通訊。不一樣的存儲引擎具備的功能不一樣,這樣咱們能夠根據本身的實際須要進行選取。安全

    d. 數據存儲層,主要是將數據存儲在運行於裸設備的文件系統之上,並完成與存儲引擎的交互。服務器

2. 併發控制和鎖的概念架構

        當數據庫中有多個操做須要修改同一數據時,不可避免的會產生數據的髒讀。這時就須要數據庫具備良好的併發控制能力,這一切在MySQL中都是由服務器和存儲引擎來實現的。併發

        解決併發問題最有效的方案是引入了鎖的機制,鎖在功能上分爲共享鎖(shared lock)和排它鎖(exclusive lock)即一般說的讀鎖和寫鎖。當一個select語句在執行時能夠施加讀鎖,這樣就能夠容許其它的select操做進行,由於在這個過程當中數據信息是不會被改變的這樣就可以提升數據庫的運行效率。當須要對數據更新時,就須要施加寫鎖了,不在容許其它的操做進行,以避免產生數據的髒讀和幻讀。鎖一樣有粒度大小,有表級鎖(table lock)和行級鎖(row lock),分別在數據操做的過程當中完成行的鎖定和表的鎖定。這些根據不一樣的存儲引擎所具備的特性也是不同的。socket

        MySQL大多數事務型的存儲引擎都不是簡單的行級鎖,基於性能的考慮,他們通常都同時實現了多版本併發控制(MVCC)。這一方案也被Oracle等主流的關係數據庫採用。它是經過保存數據中某個時間點的快照來實現的,這樣就保證了每一個事務看到的數據都是一致的。詳細的實現原理能夠參考《高性能MySQL》第三版。tcp

3. 簡單的說事務就是一組原子性的SQL語句。能夠將這組語句理解成一個工做單元,要麼所有執行要麼都不執行。在MySQL中可使用以下命令操做事務:函數

原子性(atomicity):事務中的全部操做要麼所有提交成功,要麼所有失敗回滾。

一致性(consistency):數據庫老是從一個一致性狀態轉換到另外一個一致性狀態。

隔離性(isolation):一個事務所作的修改在提交以前對其它事務是不可見的。

持久性(durability):一旦事務提交,其所作的修改便會永久保存在數據庫中。

4. 事務的隔離級別:在SQL標準中定義了四種隔離級別:

READ UNCOMMITTED(讀未提交):事務中的修改即便未提交也是對其它事務可見

READ COMMITTED(讀提交):事務提交後所作的修改纔會被另外一個事務看見,可能產生一個事務中兩次查詢的結果不一樣。

REPEATABLE READ(可重讀):只有當前事務提交才能看見另外一個事務的修改結果。解決了一個事務中兩次查詢的結果不一樣的問題。

SERIALIZABLE(串行化):只有一個事務提交以後纔會執行另外一個事務。

5. 存儲引擎介紹:

 a. InnoDB 引擎

1.將數據存儲在表空間中,表空間由一系列的數據文件組成,由InnoDB管理;

2.支持每一個表的數據和索引存放在單獨文件中(innodb_file_per_table);

3.支持事務,採用MVCC來控制併發,並實現標準的4個事務隔離級別,支持外鍵;

4.索引基於聚簇索引創建,對於主鍵查詢有較高性能;

5.數據文件的平臺無關性,支持數據在不一樣的架構平臺移植;

6.可以經過一些工具支持真正的熱備。如XtraBackup等;

7.內部進行自身優化如採起可預測性預讀,可以自動在內存中建立hash索引等。

b. Myisam引擎

1.MySQL5.1中默認,不支持事務和行級鎖;

2.提供大量特性如全文索引、空間函數、壓縮、延遲更新等;

3.數據庫故障後,安全恢復性差;

4.對於只讀數據能夠忍受故障恢復,MyISAM依然很是適用;

5.日誌服務器的場景也比較適用,只需插入和數據讀取操做;

6.不支持單表一個文件,會將全部的數據和索引內容分別存在兩個文件中;

7.MyISAM對整張表加鎖而不是對行,因此不適用寫操做比較多的場景;

8.支持索引緩存不支持數據緩存。

c. Archive引擎:

1.只支持insert和select操做;

2.緩存全部的寫數據並進行壓縮存儲,支持行級鎖但不支持事務;

3.適合高速插入和數據壓縮,減小IO操做,適用於日誌記錄和歸檔服務器。

d. Blackhole引擎:

1.沒有實現任何存儲機制,會將插入的數據進行丟棄,但會存儲二進制日誌;

2.會在一些特殊須要的複製架構的環境中使用。

e. CSV引擎:

1.能夠打開CSV文件存儲的數據,能夠將存儲的數據導出,並利用excel打開;

2.能夠做爲一種數據交換的機制,一樣常用。

Memory引擎:

1.將數據在內存中緩存,不消耗IO;

2.存儲數據速度較快但不會被保留,通常做爲臨時表的存儲被使用。

Federated引擎:

可以訪問遠程服務器上的數據的存儲引擎。可以創建一個鏈接連到遠程服務器。

Mrg_MyISAM引擎:

將多個MYISAM表合併爲一個。自己並不存儲數據,數據存在MyISAM表中間。

NDB集羣引擎:

MySQL Cluster專用。

相關文章
相關標籤/搜索