數據庫存儲引擎

MySQL總體架構

MySQL主要分爲四層架構,分別是網絡鏈接層,服務層,存儲引擎層,物理層。mysql

網絡鏈接層

主要負責鏈接管理,受權認證,安全等。每一個客戶端鏈接都對應着服務器上的一個線程。服務器上維護一個線程池,避免爲每一個鏈接建立和銷燬線程。當客戶端鏈接到MySQL服務器時,服務器對其進行認證。能夠經過用戶名與密碼認證,也能夠經過SSL證書進行認證。登陸認證後,服務器還會驗證客戶端是否有執行某個查詢的操做權限。web

服務層

第二層服務層是MySQL的核心,MySQL的核心服務層都在這一層,查詢解析,SQL執行計劃分析,SQL執行計劃優化,查詢緩存。以及跨存儲引擎的功能都在這一層實現:存儲過程,觸發器,視圖等。經過下圖來觀察服務層的內部結構:
在這裏插入圖片描述sql

存儲引擎層

負責MySQL中數據的存儲與提取。 服務器中的查詢執行引擎經過API與存儲引擎進行通訊,經過接口屏蔽了不一樣存儲引擎之間的差別。MySQL採用插件式的存儲引擎。MySQL爲咱們提供了許多存儲引擎,每種存儲引擎有不一樣的特色。咱們能夠根據不一樣的業務特色,選擇最適合的存儲引擎。若是對於存儲引擎的性能不滿意,能夠經過修改源碼來獲得本身想要達到的性能。例如阿里巴巴的X-Engine,爲了知足企業的需求facebook與google都對InnoDB存儲引擎進行了擴充。數據庫

物理層

將數據放在硬盤上緩存

數據庫存儲引擎

查看存儲引擎安全

show engines;

MyISAM存儲引擎

MyISAM存儲引擎是MySQL5.5以前的版本默認存儲引擎
MyISAM存儲引擎表由MYD(數據文件)和MYI(索引文件)組成服務器

MyISAM存儲引擎特性

1.併發性與鎖級別
2.表損壞修復
3.MyISAM表支持數據壓縮網絡

myisampack -b -f myIsam.MYI

MyISAM存儲引擎限制

版本 < MySQL5.0時默認表大小爲4G,如存儲大表則要修改MAX_Rows和AVG_ROW_LENGTH
版本 > MySQL5.0時默認支持256TB架構

MyISAM存儲引擎適合場景

1.非事務型應用
2.只讀類應用併發

Innodb存儲引擎

MySQL5.5 及以後版本默認存儲引擎
Innodb使用表空間進行數據存儲

innodb_file_per_table

ON:獨立表空間,tablename.ibd
OFF:系統表空間:ibdataX X是一個數字

系統表空間和獨立表空間如何選擇?

系統表空間會產生IO瓶頸,刷新數據的時候是順序進行的因此會產生文件的IO瓶頸
獨立表空間能夠同時向多個文件刷新數據

Innodb存儲引擎的特性

一、支持事務的ACID特性
二、Innodb支持行級鎖,能夠最大程度的支持併發

MyISAM和InnoDB對比

存儲引擎 MyISAM InnoDB
存儲結構 每張表被存放在三個文件:
一、frm-表格定義
二、MYD(MYData)-數據文件
三、MYI(MYIndex)-索引文件
全部的表都保存在同一個數
據文件中(也多是多個文
件,或者是獨立的表空間文
件),InnoDB表的大小隻
受限於操做系統文件的大
小,通常爲2GB
存儲空間 MyISAM可被壓縮,存儲空間較小 InnoDB的表須要更多的內
存和存儲,它會在主內存中
創建其專用的緩衝池用於高
速緩衝數據和索引
可移植性、備份及恢復 因爲MyISAM的數據是以文
件的形式存儲,因此在跨平
臺的數據轉移中會很方便。
在備份和恢復時可單獨針對
某個表進行操做
免費的方案能夠是拷貝數據
文件、備份 binlog,或者
用 mysqldump,在數據量
達到幾十G的時候就相對痛
苦了
事務安全 不支持,每次查詢具備原子性 支持,具備事務(commit)、
回滾(rollback)和崩潰修復
能力(crash recovery
capabilities)的事務安全
(transaction-safe (ACID
compliant))型表
AUTO_INCREMENT MyISAM表能夠和其餘字段
一塊兒創建聯合索引
InnoDB中必須包含只有該
字段的索引
SELECT MyISAM更優
INSERT InnoDB更優
UPDATE InnoDB更優
DELETE InnoDB更優 它不會從新建
立表,而是一行一行的刪除
COUNT without WHERE MyISAM更優。由於
MyISAM保存了表的具體行
InnoDB沒有保存表的具體
行數,須要逐行掃描統計,
就很慢了
COUNT with WHERE 同樣 同樣,InnoDB也會鎖表
只支持表鎖 支持表鎖、行鎖 行鎖大幅度
提升了多用戶併發操做的新
能。可是InnoDB的行鎖,
只是在WHERE的主鍵是有
效的,非主鍵的WHERE都
會鎖全表的
外鍵 不支持 支持
FULLTEXT全文索引 支持 不支持 能夠經過使用
Sphinx從InnoDB中得到全
文索引,會慢一點

CSV存儲引擎

文件系統存儲特色

數據以文本方式存儲在文件中
.CSV文件存儲表內容
.CSM文件存儲表的元數據如表狀態和數據量
.frm文件存儲表結構信息

特色

以CSV格式進行數據存儲

使用場景

適合作爲數據交換的中間表

Memory存儲引擎

也稱HEAP存儲引擎,因此數據保存在內存中,若是MySQL服務重啓數據會丟失,可是表結構會保存下來

功能特色

一、支持HASH索引和BTree索引
二、全部字段都爲固定長度 varchar(10)=char(10)
三、不支持BLOB和TEXT等大字段
四、Memory存儲引擎使用表級鎖

適用類型

一、日誌型應用
二、只讀或者大部分狀況下只讀的表
三、訂單處理

如何選擇存儲引擎

大部分狀況下,InnoDB都是正確的選擇,能夠簡單地概括爲一句話「除非須要用到某些InnoDB不具有的特性,而且沒有其餘辦法能夠替代,不然都應該優先選擇InnoDB引擎。

選擇時參考條件

事務

若是應用須要事務支持,那麼InnoDB(或者XtraDB)是目前最穩定而且通過驗證的選擇

備份

若是能夠按期地關閉服務器來執行備份,那麼備份的因素能夠忽略。反之,若是須要在線熱備份,那麼選擇
InnoDB就是基本的要求

崩潰恢復

MyISAM崩潰後發生損壞的機率比InnoDB要高不少,並且恢復速度也要慢