-
1 # Lake說科技
-
2 # 滴水恆心
MySQL 是一個常見的開源免費多引擎的關係型資料庫,各種介面卡齊全,我們很容易就可以在專案中使用它。常見儲存引擎有 InnoDB,MyISAM,MRG_MYISAM,BLACKHOLE ,MEMORY,PERFORMANCE_SCHEMA,ARCHIVE,CSV,,FEDERATED 等。
在 MySQL 5.5 版本之前中預設是 MyISAM 引擎,但到了 5.5+ 版本就預設使用 InnoDB 引擎,支援的引擎如下:
MySQL 5.5.62:
MySQL 5.6.24:
MySQL 5.7.27:
MySQL 8.0.17:
首先,就是要對這些儲存引擎有一定的瞭解,才能在實際使用過程中針對性的選擇最佳的引擎方案,最常用的引擎就是 InnoDB 和 MyISAM 兩種,我們可以從是否支援行級鎖,是否支援事務、是否支援外來鍵,是否支援 MVCC,是否支援安全恢復、效能等角度去對比並結合專案的實際需求,選擇最合適的儲存方案。
InnoDB 支援原子性、一致性、隔離性、永續性的事務處理特性、同時支援外來鍵,支援行級鎖(row-level locking)和表級鎖(table-level locking),預設是行級鎖。而 MyISAM 只支援表級鎖,不支援事務和外來鍵。
MyISAM 查詢效能比較好,提供全文索引、壓縮、空間函式等,但是InnoDB 提供事務支援事務,外部鍵等高階資料庫功能。 具有事務(commit)、回滾(rollback)和崩潰修復能力(crash recovery capabilities)的事務安全(transaction-safe (ACID compliant))型表。
僅 InnoDB 支援 MVCC。應對高併發事務, MVCC 比單純的加鎖更高效; MVCC 只在 READ COMMITIED 和 REPERATABLE READ 兩個隔離級別下工作,MVCC 可以使用 樂觀(optimistic)鎖和悲觀(pessimistic)鎖來實現,各資料庫中MVCC實現並不統一。
在瞭解 MySQL 各類儲存引擎的特點後,我相信你在選擇何種方案應該就很好決定了。
回覆列表
Mysql作為一款關係型資料庫,其中優勢之一,便是支援儲存引擎可插拔。你可以結合具體的使用場景,來選擇特定的儲存引擎。比如你可以選擇InnoDB或者MyISAM儲存引擎。同時由於Mysql是一款開源資料庫,你也可以根據Mysql自定義的預留儲存引擎介面,自己開發實現新的儲存引擎。
Mysql中,不同的儲存引擎,都有各自的特點。Mysql資料庫儲存包括:InnoDB儲存引擎、MyISAM儲存引擎、NDB儲存引擎、Memory儲存引擎、Archive儲存引擎等。
01如果需要支援線上事務處理場景,請選擇InnoDB儲存引擎InnoDB儲存引擎最大的特點,便是支援事務,行鎖的設計,同時支援外來鍵和MVCC。資料庫中的事務表示一段最小可執行SQL邏輯。事務可以包含多個SQL語句,也可以是一個SQL語句組成。
事務執行中,要麼全部執行成功,要麼全部執行失敗。事務的四個特性:原子性(事務是最小執行單位)、一致性(資料狀態總是從一個一致性狀態到另外一個一致性狀態)、隔離性(事務之間是隔離的)、永續性。資料庫事務經常會用在金融領域的場景,比如轉賬等。
所以,如果你的業務場景需要支援事務特性,那麼你在使用Mysql時,需要選擇InnoDB儲存引擎來支援。InnoDB儲存引擎目前在很多公司也用的比較廣泛,比如Facebook、阿里等。
02如果需要支援聯機分析場景,請選擇MyISAM儲存引擎MyISAM儲存引擎不支援事務,它的最大的一個特點便是支援OLAP(聯機分析場景)。公司業務方經常會有這樣的需求,需要對資料進行聚合操作,比如對資料進行SUM(求和)、COUNT(計數)等指標類計算,對這部分資料分析,進一步分析資料的價值,為公司上層提供決策支援。此時Mysql資料庫可以選擇MyISAM儲存引擎來支援。
03如果可以將資料臨時放到記憶體,希望訪問資料速度快,可以選擇Memory儲存引擎。如果需要對資料進行歸檔,請選擇Archive儲存引擎Memory儲存引擎會將資料儲存到記憶體中,對於記憶體資料的訪問,其速度很快。當然有一個問題,如果我們的資料庫發生故障或者奔潰重啟時,記憶體中的資料會全部消失。
所以對於Memory儲存引擎,它適用的場景用於儲存臨時資料的臨時表以及資料維表到記憶體中,也可以使用Memory儲存引擎來儲存SQL查詢中的臨時結果表。
對於Archive儲存引擎,它非常適用於儲存歸檔的資料,比如儲存日誌資訊,這部分資料沒有那麼重要,對其進行壓縮排一步降低磁碟的儲存空間。