MySQL邏輯架構及存儲引擎簡介

jopen 10年前發布 | 15K 次閱讀 MySQL 數據庫服務器

MySQL邏輯架構:

 

并發控制:由鎖實現

讀鎖:也叫共享鎖,讀鎖互相不阻塞。A加鎖表后A,b,c,d都能讀該表但不能寫該表。

寫鎖:也叫排他鎖,寫鎖相互阻塞。A加排他鎖后,其他線程不能讀寫該表。

 

鎖粒度:

表鎖:鎖一個表,并發粒度小。代表存儲引擎MyISAM

行鎖:鎖一行數據,并發粒度大,并發操作表性能好。代表存儲引擎InnoDB。鎖粒度小系統對鎖的開銷也大。

  假如給一個表加讀鎖,那么其他線程也無法對該表進行寫操作了,如果是加行鎖那么該線程只阻塞只對這一行數據的讀寫,表中其他行的數據其他線程可以讀寫,提高并發性能。

 

事務:相當于把N條語句打包成一條語句,這個包中的N條語句全部執行成功則成功,如果有其中一條語句沒有執行成功則事務回滾到原先狀態事務執行失敗不寫入硬盤。

ACID(atomicityconsistency isolation durability)原子性,一致性,隔離性,持久性。是事務存儲引擎的特性。

原子性:事務相當于一個N條語句的包,要么全部執行成功,要么則失敗,對于事務來說不能成功執行一個事務的一部分,這就是原子性。

一致性:從一個一致的狀態轉換到另一個一致的狀態。要么成功轉換為成功的狀態,要么失敗回滾為原來的狀態。

隔離性:A事務看不到B事務。

持久性:事務執行成功則寫入硬盤,這就是叫持久性。

 

存儲引擎:

·數據庫存在目錄中,庫中的表存在該目錄下。

·查看存儲引擎:show table status like ‘table_name’ \G;

 

MyISAM存儲引擎

·將表存在3個文件中.MYD存數據.MYI存索引.frm存表定義。

·支持表鎖

·myisam表很大時更容易出現故障,需要手工進行修復表,并且修復時間會非常漫長。修復表步驟:檢查表,然后修復表。

·壓縮表

 

InnoDB

·將表存在2個文件中ibdata1數據文件和數據庫目錄下的.frm表定義文件。

·支持事務

·支持行鎖

·外鍵約束

·基于聚簇索引建立的,聚簇索引對主鍵查詢性能非常高。

·InnoDB支持熱備份,而其他所有存儲引擎都不支持熱備份。

 

選擇合適的存儲引擎:

·MySQL5.5默認存儲引引擎為InnoDB,最簡單的答案是如果你不知道該選用何種存儲引擎那么你就用InnoDB,因為它支持事務并且性能好。有些人說MyISAM性能比InnoDB快,這可不一定,書中說很多時候InnoDB讓MyISAM望塵莫及。

 

選擇依據:

1、事務:InnoDB支持事務,MyISAM不是事務型存儲引擎。

2、InnoDB支持在線熱備份。

3、崩潰恢復,InnoDB是事務型存儲引擎支持,MyISAM崩潰后修復一個大的表是非常慢的。

4、特有特性,比如聚簇索引,外鍵約束,行鎖等等。

 

如果對數據安全性要求不高,并且主要讀取的并且數據庫表不是很大的場景下應用MyISAM。

數據量非常大那么還是用InnoDB吧,當讀寫非常頻繁時候行級鎖性能更好。

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!