2013-07-05

[轉載][MySQL] Storage Engines

轉載自:Chapter 14. Pluggable Storage Engine Architecture

第14章:插件式儲存引擎體系結構


目錄
14.1. 前言
14.2. 概述
14.3. 公共MySQL資料庫伺服器層
14.4. 選擇儲存引擎
14.5. 將儲存引擎指定給資料表
14.6. 儲存引擎和事務
14.7. 插入儲存引擎
14.8. 拔出儲存引擎
14.9. 插件式儲存器的安全含義


14.1. 前言


在MySQL 5.1中,MySQL AB引入了新的插件式儲存引擎體系結構,允許將儲存引擎加載到正在運新的MySQL伺服器中。

本章介紹了插件式儲存引擎體系結構,概要介紹了與MySQL一起提供的各種儲存引擎,介紹了將儲存引擎賦給資料表的方法,以及插入和拔出儲存引擎的方法。


14.2. 概述


使用MySQL插件式儲存引擎體系結構,允許資料庫專業人員為特定的應用需求選擇專門的儲存引擎,完全不需要管理任何特殊的應用編碼要求。採用MySQL伺服器體系結構,由於在儲存級別上提供了一致和簡單的應用模型和API,應用程式編程人員和DBA可不再考慮所有的底層實施細節。因此,儘管不同的儲存引擎具有不同的能力,應用程式是與之分離的。

在下圖中,以圖形方式介紹了MySQL插件式儲存引擎體系結構:

圖14.1:MySQL插件式儲存引擎的體系結構
The MySQL pluggable storage engine architecture

插件式儲存引擎體系結構提供了標準的管理和支援服務集合,它們對所有的基本儲存引擎來說是共同的。儲存引擎本身是資料庫伺服器的組件,負責對在物理伺服器層面上維護的基本數據進行實際操作。

這是一種高效的模塊化體系結構,它為那些希望專注於特定應用需求的人員提供了巨大的便利和益處,這類特殊應用需求包括數據倉儲、事務處理、高可用性情形等,同時還能利用獨立於任何儲存引擎的一組接口和服務。

應用程式編程人員和DBA通過位於儲存引擎之上的連接器API和服務層來處理MySQL資料庫。如果應用程式的變化需要改變底層儲存引擎,或需要增加1個或多個額外的儲存引擎以支援新的需求,不需要進行大的編碼或程序更改就能實現這類要求。MySQL伺服器體系結構提供了一致和易於使用的API,這類API適用於多種儲存引擎,通過該方式,該結構將應用程式與儲存引擎的底層複雜性隔離開來。


14.3. 公共MySQL資料庫伺服器層


MySQL插件式儲存引擎是MySQL資料庫伺服器中的組件,負責為資料庫執行實際的數據I/O操作,並能允許和強制執行面向特殊應用需求的特定特性集合。使用特殊儲存引擎的主要優點之一在於,僅需提供特殊應用所需的特性,因此,資料庫中的系統開銷較小,最終結果具有更有效和更高的資料庫性能。這也是MySQL被始終視為具有高性能的原因之一,在行業標準基準方面,它能匹敵或擊敗專有的整體式資料庫。

從技術角度上看,在儲存引擎中,一些獨特的支援底層結構的組件是什麼呢?一些關鍵差別包括:
  • 並發性:某些應用程式比其他應用程式具有很多的顆粒級鎖定要求(如行級鎖定)。選擇正確的鎖定策略能夠減少開銷,並有助於整體性能的提升。它還包括對多種能力的支援,如多版本並發性控制或「快照」讀取等。
  • 事務支援:並非所有的應用程式都需要事務,但對的確需要事務的應用程式來說,有著定義良好的需求,如ACID兼容等。
  • 引用完整性:通過DDL定義的外部鍵,伺服器需要強制保持關聯資料庫的引用完整性。
  • 物理儲存:它包括各種各樣的事項,從資料表和索引的總的頁大小,到儲存數據所需的格式,到物理磁盤。
  • 索引支援:不同的應用程式傾向於採用不同的索引策略,每種儲存引擎通常有自己的編制索引方法,但某些索引方法(如B-tree索引)對幾乎所有的儲存引擎來說是共同的。
  • 內存高速緩衝:與其他應用程式相比,不同的應用程式對某些內存高速緩衝策略的響應更好,因此,儘管某些內存高速緩衝對所有儲存引擎來說是共同的(如用於用戶連接的高速緩衝,MySQL的高速查詢高速緩衝等),其他高速緩衝策略僅當使用特殊的儲存引擎時才唯一定義。
  • 性能幫助:包括針對並行操作的多I/O線程,線程並發性,資料庫檢查點,成批插入處理等。
  • 其他目標特性:可能包括對地理空間操作的支援,對特定數據處理操作的安全限制等。
每組插件式儲存引擎基本組件均採用了相應的設計,能夠為特定應用提供可選擇的特性集合。從反面角度看,避免使用組件特性集合有助於避免不必要的開銷。因此,顯而易見,應理解特定應用程式的需求集合,並選擇恰當的能大幅度改善系統整體效率和性能的MySQL儲存引擎。


14.4. 選擇儲存引擎


與MySQL一起提供的各種儲存引擎在設計時考慮了不同的使用情況。為了更有效地使用插件式儲存體系結構,最好瞭解各種儲存引擎的優點和缺點。

在下面的資料表格中,概要介紹了與MySQL一起提供的儲存引擎:

圖14.2:儲存引擎比較
Storage engine comparison

下述儲存引擎是最常用的:
  • MyISAM:預設的MySQL插件式儲存引擎,它是在Web、數據倉儲和其他應用環境下最常使用的儲存引擎之一。注意,通過更改STORAGE_ENGINE配置變數,能夠方便地更改MySQL伺服器的預設儲存引擎。
  • InnoDB:用於事務處理應用程式,具有眾多特性,包括ACID事務支援。
  • BDB:可替代InnoDB的事務引擎,支援COMMIT、ROLLBACK和其他事務特性。
  • Memory:將所有數據保存在RAM中,在需要快速搜尋引用和其他類似數據的環境下,可提供極快的訪問。
  • Merge:允許MySQL DBA或開發人員將一系列等同的MyISAM資料表以邏輯方式組合在一起,並作為1個對象引用它們。對於諸如數據倉儲等VLDB環境十分適合。
  • Archive:為大量很少引用的歷史、歸檔、或安全審計訊息的儲存和檢索提供了完美的解決方案。
  • Federated:能夠將多個分離的MySQL伺服器連結起來,從多個物理伺服器建立一個邏輯資料庫。十分適合於分佈式環境或數據集市環境。
  • Cluster/NDB:MySQL的叢集式資料庫引擎,尤其適合於具有高性能搜尋要求的應用程式,這類搜尋需求還要求具有最高的正常工作時間和可用性。
  • Other:其他儲存引擎包括CSV(引用由逗號隔開的用作資料庫資料表的檔案),Blackhole(用於臨時禁止對資料庫的應用程式輸入),以及Example引擎(可為快速建立定制的插件式儲存引擎提供幫助)。
請記住,對於整個伺服器或方案,您並不一定要使用相同的儲存引擎,您可以為方案中的每個資料表使用不同的儲存引擎,這點很重要。

關於MySQL中所包含儲存引擎的詳細訊息,請參見14.4節,「選擇儲存引擎」




14.5. 將儲存引擎指定給資料表


可以在建立新資料表時指定儲存引擎,或通過使用ALTER TABLE語句指定儲存引擎。

要想在建立資料表時指定儲存引擎,可使用ENGINE參數:
CREATE TABLE engineTest(
    id INT
) ENGINE = MyISAM;


要想更改已有資料表的儲存引擎,可使用ALTER TABLE語句:
ALTER TABLE engineTest ENGINE = ARCHIVE;


14.6. 儲存引擎和事務


下述儲存引擎支援事務:
  • InnoDB:通過MVCC支援事務,允許COMMIT、ROLLBACK和保存點。
  • NDB:通過MVCC支援事務,允許COMMIT和ROLLBACK。
  • BDB:支援事務,允許COMMIT和ROLLBACK。


14.7. 插入儲存引擎


能夠使用儲存引擎之前,必須使用INSTALL PLUGIN語句將儲存引擎plugin(插件)裝載到mysql。例如,要想加載example引擎,首先應加載ha_example.so模塊:
INSTALL PLUGIN ha_example SONAME 'ha_example.so';

檔案.so必須位於MySQL伺服器庫目錄下(典型情況下是installdir/lib)。


14.8. 拔出儲存引擎


要想拔出儲存引擎,可使用UNINSTALL PLUGIN語句:
UNINSTALL PLUGIN ha_example;

如果拔出了正被已有資料表使用的儲存引擎,這些資料表將成為不可訪問的。拔出儲存引擎之前,請確保沒有任何資料表使用該儲存引擎。


14.9. 插件式儲存器的安全含義


為了安裝插件式儲存引擎,plugin檔案必須位於恰當的MySQL庫目錄下,而且發出INSTALL PLUGIN語句的用戶必須具有SUPER權限。


這是MySQL參考手冊的翻譯版本,關於MySQL參考手冊,請訪問dev.mysql.com。原始參考手冊為英文版,與英文版參考手冊相比,本翻譯版可能不是最新的。

0 回應: