文章目录
- 说明
- NDB和InnoDB的不同点
- NDB和InnoDB的性能、负载比较
- NDB和InnoDB特性总结
说明
首先MySQL提供了众多的存储引擎供用户使用,但是支持事务的存储引擎并不多:NDB和InnoDB两个。但是NDB只支持在NDB集群中使用,并不支持在其他场景下使用。下面我们主要讨论它们之间不同的地方,各自的优缺点方便用户根据自己的实际情况进行选项。
注:在NDB集群中,只支持NDB存储引擎的表,其他存储引擎的表将不会被集群化。
NDB和InnoDB的不同点
NDB需要通过一个分布式集群来使用,采用的不共享任何数据、组件的集群,无单点故障。
-
以MySQL8.0,NDB8.0版本为例:
而对于MySQL5.7,NDB7.5/7.6版本没有区别,除了数据库版本之外。
特性 | (MySQL 8.0) | 8.0 |
MySQL版本 | 8.0 | 8.0 |
InnoDB版本 | 8.0.15 | 8.0.15 |
NDB集群版本 | N/A | 8.0.14/8.0.14 |
存储限制 | 64TB | 128TB |
外键 | Yes | Yes |
事务 | 所有类型 | READ COMMITTED |
MVCC | Yes | No |
数据压缩 | Yes | No (NDB的检查点和备份文件可以压缩) |
大行数据(> 14K) | 支持 VARBINARY,VARCHAR,BLOB,TEXT | 只支持 BLOB,TEXT (如果存储非常大的数据,会降低NDB的性能) |
支持复制 | 异步和半同步复制; MySQL组复制 | 在NDB集群中自动同步复制;在NDB集群之间使用MySQL复制进行异步复制(不支持半同步复制) |
分布式读 | Yes (MySQL复制) | Yes |
分布式写 | 需要应用程序级别进行操作 | Yes |
高可用 | 内置,InnoDB集群 | Yes (99.999%的稳定性) |
节点故障恢复、切换 | MySQL组复制 | 自动化 |
节点故障恢复时间 | 30秒或更长 | 通常情况小于1秒 |
实时性能 | No | Yes |
内存表 | No | Yes (可以同时存储在磁盘、内存上) |
NoSQL访问存储引擎 | Yes | Yes (多种APIs, 包括:Memcached, Node.js/JavaScript, Java, JPA, C++和HTTP/REST) |
并发和并行写入 | Yes | 可支持最多48并行写操作, 优化并发写入操作 |
冲突检测和解决(多主) | Yes (MySQL Group Replication) | Yes |
Hash索引 | No | Yes |
在线添加节点 | 组复制中的读、写节点 | Yes (所有类型的节点) |
在线升级 | Yes (复制) | Yes |
在线修改 | Yes | Yes |
NDB和InnoDB的性能、负载比较
NDB集群具有一系列独特的属性,这些属性使其非常适合为需要高可用性、快速故障转移、高吞吐量和低延迟的应用程序提供服务。由于其分布式体系结构和多节点实现,NDB集群还具有特定的约束,可能会阻碍一些工作负载的良好执行。关于数据库驱动的应用程序工作负载的一些常见类型,NDB和InnoDB存储引擎在行为上的一些主要差异如下表所示:
负载 | InnoDB | NDB 集群 |
大容量OLTP应用程序 | Yes | Yes |
DSS应用(数据marts,分析) | Yes | Limited (Join operations across OLTP datasets not exceeding 3TB in size) |
自定义应用程序 | Yes | Yes |
打包的应用程序 | Yes | Limited (通过主键访问); NDB 8.0集群支持外键 |
网络电讯应用(HLR, HSS, SDP) | No | Yes |
会话管理和缓存 | Yes | Yes |
电子商务应用程序 | Yes | Yes |
用户档案管理,AAA协议 | Yes | Yes |
NDB和InnoDB特性总结
使用InnoDB主要关心的需求
- 外键
- 全表扫描
- 非常大的数据、行或事物
-
以外的事务类型READ COMMITTED
- NDB 集群8.0支持外键
- 写分离
- 99.999%的运行可靠性
- 在线添加节点、在线修改
- 多个SQL 和NoSQL API
- 实时性能
-
列限制使用BLOB
- 支持外键