MySQL 提供多種存儲引擎,核心差異在於事務、鎖粒度、高可用、擴展性、內存/磁盤架構。本文基於官方文檔(MySQL 5.6 / NDB 7.3)整理三大引擎關鍵特性對比表,並給出選型建議。
| 特性 | InnoDB 5.6 | NDB Cluster 7.3 |
|---|---|---|
| 存儲上限 | 64 TB | 3 TB (48節點×64GB RAM,可擴展) |
| 外鍵 | 支援 | 7.3 起支援(舊版忽略) |
| 事務隔離級別 | 全支援 | 僅 READ COMMITTED |
| MVCC | 是 | 否 |
| 數據壓縮 | 是 | 否 (檢查點/備份可壓縮) |
| 大行支援 (>14K) | VARBINARY/VARCHAR/BLOB/TEXT | 僅 BLOB/TEXT |
| 複製模式 | 異步/半同步 | 集群內同步,集群間異步 |
| 寫擴展 | 需應用分片 | 自動分區,透明寫擴展 |
| 高可用 (99.999%) | 需額外軟體 | 原生架構保證 |
| 節點故障恢復 | ≥30秒 | 通常 <1秒 |
| 實時性能 | 否 | 是 |
| 內存表 | 否 | 是 (可選磁盤持久化) |
| NoSQL 介面 | 開發中 | Memcached、Node.js、Java、C++、HTTP/REST |
| 並發寫入器 | 不支援 | 最多 48 寫入節點 |
| 衝突檢測/解決 | 無 | 支援多主複製 |
| Hash 索引 | 無 (自適應哈希內部使用) | 支援 |
| 在線加節點 | 只讀副本 | 全節點類型支援 |
| 在線升級 | 否 | 是 |
| 在線 Schema 變更 | 是 (5.6+) | 是 |
| 負載類型 | InnoDB | NDB Cluster |
|---|---|---|
| 高吞吐 OLTP | 是 | 是 |
| DSS/數據集市/分析 | 是 | 有限 (JOIN 跨 OLTP 數據集 ≤3TB) |
| 定製應用 | 是 | 是 |
| 包裝應用 | 是 | 有限 (建議主鍵訪問為主) |
| 電信級 HLR/HSS/SDP | 否 | 是 |
| 會話管理/緩存 | 是 | 是 |
| 電商 | 是 | 是 |
| 用戶畫像/AAA | 是 | 是 |
Memory 引擎適合:瞬態非關鍵數據(Session/緩存)、純內存極速訪問、數據量小於內存、讀多寫少。
NDB 完整超集 Memory:行級鎖、多線程、寫擴展、可選磁盤持久化、無單點故障、自動分區、支援變長類型 (BLOB/TEXT)。
若業務依賴 Memory 但需高可用/持久化/擴展,直接遷移至 NDB Cluster。
| 特性 | MyISAM | Memory | InnoDB | Archive | NDB |
|---|---|---|---|---|---|
| 存儲上限 | 256TB | RAM | 64TB | 無 | 384EB |
| 事務 | 否 | 否 | 是 | 否 | 是 |
| 鎖粒度 | 表 | 表 | 行 | 表 | 行 |
| MVCC | 否 | 否 | 是 | 否 | 否 |
| B-tree 索引 | 是 | 是 | 是 | 否 | 否 |
| T-tree 索引 | 否 | 否 | 否 | 否 | 是 |
| Hash 索引 | 否 | 是 | 否* | 否 | 是 |
| 全文索引 | 是 | 否 | 是 (5.6+) | 否 | 否 |
| 聚簇索引 | 否 | 否 | 是 | 否 | 否 |
| 數據緩存 | 否 | N/A | 是 | 否 | 是 |
| 壓縮數據 | 是 (只讀) | 否 | 是 (Barracuda) | 是 | 否 |
| 加密數據 | 是 (Server層) | 是 | 是 | 是 | 是 |
| 集群支援 | 否 | 否 | 否 | 否 | 是 |
| 複製支援 | 是 (Server層) | 是 | 是 | 是 | 是 |
| 外鍵 | 否 | 否 | 是 | 否 | 否 (7.3+支援) |
| 備份/PITR | 是 (Server層) | 是 | 是 | 是 | 是 |
* InnoDB 內部自適應哈希索引非用戶可見。
選擇 NDB Cluster 必須結合具體業務場景、數據模型、一致性要求、運維能力進行充分壓測與驗證。參考官方白皮書 Scaling Web Services with MySQL Cluster: An Alternative to the MySQL Memory Storage Engine 獲取更深度對比。