以前一直玩Oracle數據庫,整天圍著業務需求和執行計劃轉,剛剛接觸Mysql看到存儲引擎不慎理解,相應會有與我相同人群存在,所以寫文以記之。
首先簡單從字面理解,想當是與磁盤打交道的,實際情況也是如此。一個數據庫系統可以隨意切換不同的存儲引擎,也就是說隨意選擇寫磁盤或操作磁盤的方式,覺得還是很牛掰的,所以這裡看下Mysql的體系結構。
MySQL服務器采用了多層設計和獨立模塊,插件式存儲引擎體系結構,允許將存儲引擎加載到正在運新的MySQL服務器中,圖中的Pluggable Storage Engines部分。采用MySQL服務器體系結構,由於在存儲級別上(也就是Pluggable Storage Engines)提供了一致和簡單的應用模型和API,應用程序編程人員和DBA可不再考慮所有的底層實施細節。因此,盡管不同的存儲引擎具有不同的能力,應用程序是與之分離的。存儲引擎就司職與文件系統打交道了。
到這裡對與存儲引擎的定位以及功能應該是基本了解的,接下來的疑問就是,有沒有必要。很有必要的,因為一下羅列的內容是存儲引擎處理的事情:
以上要求會在不同的需求中予以體現,通過單獨一個系統實現是不可能的,以上特點有些本身就是相互矛盾的,魚和熊掌的問題。對以上內容做些選擇,形成的存儲引擎就是一個插件引擎了,某些特定的需求可以使用。如下圖,部分現有的存儲引擎以及基本特點:
至此,應該對存儲引擎有一個直觀的印象了。對了,還有一點需要格外注意的: Mysql中不同的表可以指定不同的存儲引擎,也就是說一套Mysql服務器可以同時使用N種不同的存儲引擎,甚至自己寫一個。