MySQL 8.0 参考手册 / 第 23 章 MySQL NDB Cluster 8.0 / 23.2 NDB Cluster 概述 / 23.2.6 使用 InnoDB 的 MySQL 服务器与 NDB Cluster 比较 /
21.2.6.1 NDB 和 InnoDB 存储引擎的区别
NDB存储引擎是使用分布式、无共享架构实现的,这导致它在许多方面表现
不同InnoDB。对于那些不习惯使用 的人来说
NDB,由于其在事务、外键、表限制和其他特征方面的分布式特性,可能会出现意想不到的行为。这些如下表所示:
表 21.1 InnoDB 和 NDB 存储引擎之间的差异
| 特征 | InnoDB(MySQL 5.7) |
NDB7.5/7.6 |
|---|---|---|
| MySQL服务器版本 | 5.7 | 5.7 |
InnoDB版本 |
InnoDB5.7.40 |
InnoDB5.7.40 |
| NDB 集群版本 | 不适用 | NDB
7.5.29/7.6.25 |
| 存储限制 | 64TB | 128TB(自 NDB 7.5.2 起) |
| 外键 | 是的 | 是的 |
| 交易 | 所有标准类型 | READ COMMITTED |
| MVCC | 是的 | 不 |
| 数据压缩 | 是的 | 否(可以压缩 NDB 检查点和备份文件) |
| 大行支持(> 14K) | 支持VARBINARY、
VARCHAR、
BLOB和
TEXT列 |
仅支持BLOB和
TEXT列(使用这些类型存储大量数据会降低 NDB 性能) |
| 复制支持 | 使用 MySQL Replication 进行异步和半同步复制;MySQL组复制 | NDB Cluster 内的自动同步复制;NDB 集群之间的异步复制,使用 MySQL 复制(不支持半同步复制) |
| 读取操作的横向扩展 | 是(MySQL 复制) | 是(NDB Cluster 中的自动分区;NDB Cluster 复制) |
| 写入操作的横向扩展 | 需要应用程序级分区(分片) | 是(NDB Cluster 中的自动分区对应用程序是透明的) |
| 高可用性 (HA) | 内置,来自InnoDB集群 | 是(专为 99.999% 的正常运行时间而设计) |
| 节点故障恢复和故障转移 | 从 MySQL 组复制 | 自动(NDB 架构中的关键元素) |
| 节点故障恢复时间 | 30 秒或更长时间 | 通常 < 1 秒 |
| 实时性能 | 不 | 是的 |
| 内存表 | 不 | 是(一些数据可以选择存储在磁盘上;内存和磁盘数据存储都是持久的) |
| NoSQL 访问存储引擎 | 是的 | 是(多种 API,包括 Memcached、Node.js/JavaScript、Java、JPA、C++ 和 HTTP/REST) |
| 并发和并行写入 | 是的 | 最多 48 个写入器,针对并发写入进行了优化 |
| 冲突检测和解决(多个复制源) | 是(MySQL 组复制) | 是的 |
| 哈希索引 | 不 | 是的 |
| 在线添加节点 | 使用 MySQL 组复制的读/写副本 | 是(所有节点类型) |
| 在线升级 | 是(使用复制) | 是的 |
| 在线模式修改 | 是,作为 MySQL 5.7 的一部分 | 是的 |