使用InnoDB和NDB群集的MySQL服务器
MySQL Server在存储引擎中提供了多种选择。由于双方NDB
并InnoDB
可以作为事务的MySQL存储引擎,MySQL服务器的用户有时会感兴趣的NDB集群。他们将其NDB
视为InnoDB
MySQL 8.0中默认存储引擎的替代或升级。虽然NDB
与InnoDB
有着共同的特点,也有在体系结构和实现的差异,使一些现有的MySQL服务器的应用程序和使用方案可以很好的适用于NDB簇,但不是所有的人。
在本节中,我们讨论并比较NDB
NDB 8.0 InnoDB
使用的存储引擎和MySQL 8.0使用的存储引擎的一些特性。接下来的几节提供技术比较。在许多情况下,必须在考虑所有因素的情况下,根据具体情况决定何时何地使用NDB Cluster。尽管为每种可能的使用情况提供详细信息超出了本文档的范围,但我们还尝试针对某些通用类型的应用程序NDB
相对于InnoDB
后端的相对适用性提供一些非常一般的指导。
NDB Cluster 8.0使用基于MySQL 8.0 的mysqld,包括对InnoDB
1.1的支持。虽然可以将InnoDB
表与NDB群集一起使用,但此类表不是群集的。NDB Cluster 8.0发行版中的程序或库也不能与MySQL Server 8.0一起使用,反之亦然。
虽然确实可以在NDB群集或MySQL Server(最有可能使用InnoDB
存储引擎)上运行某些类型的通用业务应用程序,但是在体系结构和实现方面还是存在一些重要差异。“ NDB和InnoDB存储引擎之间的差异”总结了这些差异。由于差异,某些使用场景显然更适合一个引擎或另一个引擎;请参见“ NDB和InnoDB工作负载”。反过来,这会对更适合用于NDB
或的应用程序类型产生影响InnoDB
。请参见“ NDB和InnoDB功能使用摘要”,用于比较每种类型在普通类型的数据库应用程序中使用的相对适用性。
有关NDB
和MEMORY
引擎的相对特征的信息,请参阅何时使用MEMORY或NDB群集。
有关MySQL存储引擎的更多信息,请参见备用存储引擎。
NDB和InnoDB存储引擎之间的差异
该NDB
存储引擎采用分布式,无共享架构,这会导致它从行为不同的方式实现InnoDB
在多种方式。对于那些不习惯使用的人NDB
,由于其在事务,外键,表限制和其他特征方面的分布式性质,可能会出现意外行为。下表中显示了这些:
InnoDB和NDB存储引擎之间的区别
特征 | InnoDB (MySQL 8.0) | NDB 8.0 |
---|---|---|
MySQL服务器版本 | 8.0 | 8.0 |
InnoDB 版 | InnoDB 8.0.21 | InnoDB 8.0.21 |
NDB群集版本 | 不适用 | NDB 8.0.20 / 8.0.20 |
储存限制 | 64TB | 128TB |
外键 | 是 | 是 |
交易次数 | 所有标准类型 | READ COMMITTED |
MVCC | 是 | 没有 |
资料压缩 | 是 | 否(可以压缩NDB检查点和备份文件) |
大行支持(> 14K) | 支持VARBINARY ,VARCHAR ,BLOB ,和TEXT 列 | 仅支持BLOB 和TEXT 列(使用这些类型存储大量数据会降低NDB性能) |
复制支持 | 使用MySQL复制的异步和半同步复制;MySQL 组复制 | NDB群集内的自动同步复制;使用MySQL复制在NDB群集之间进行异步复制(不支持同步复制) |
读取操作的横向扩展 | 是(MySQL复制) | 是(NDB群集中的自动分区; NDB群集复制) |
用于写操作的横向扩展 | 需要应用程序级分区(分片) | 是(NDB群集中的自动分区对应用程序是透明的) |
高可用性(HA) | 内置,来自InnoDB集群 | 是(旨在实现99.999%的正常运行时间) |
节点故障恢复和故障转移 | 从MySQL组复制 | 自动(NDB体系结构中的关键元素) |
节点故障恢复时间 | 30秒以上 | 通常少于1秒 |
实时性能 | 没有 | 是 |
内存表 | 没有 | 是(某些数据可以有选择地存储在磁盘上;内存和磁盘数据存储都是持久的) |
NoSQL访问存储引擎 | 是 | 是(多种API,包括Memcached,Node.js / JavaScript,Java,JPA,C ++和HTTP / REST) |
并发和并行写入 | 是 | 多达48位作者,针对并发写入进行了优化 |
冲突检测和解决(多个复制主机) | 是(MySQL组复制) | 是 |
哈希索引 | 没有 | 是 |
在线添加节点 | 使用MySQL组复制读取/写入副本 | 是(所有节点类型) |
在线升级 | 是(使用复制) | 是 |
在线模式修改 | 是的,作为MySQL 8.0的一部分 | 是 |
NDB和InnoDB工作负载
NDB群集具有一系列独特的属性,因此非常适合为需要高可用性,快速故障转移,高吞吐量和低延迟的应用程序提供服务。由于其分布式体系结构和多节点实施,NDB群集还具有特定的约束,可能会使某些工作负载无法正常运行。下表显示了数据库引擎NDB
和InnoDB
存储引擎在某些常见类型的数据库驱动的应用程序工作负载方面在行为方面的许多主要差异:
InnoDB和NDB存储引擎(数据驱动的应用程序工作负载的常见类型)之间的区别。
工作量 | InnoDB | NDB丛集(NDB ) |
---|---|---|
大量OLTP应用 | 是 | 是 |
DSS应用程序(数据集市,分析) | 是 | 受限(跨OLTP数据集的合并操作,大小不超过3TB) |
定制应用 | 是 | 是 |
打包的应用程序 | 是 | 受限(应该主要是主键访问);NDB Cluster 8.0支持外键 |
网络内电信应用(HLR,HSS,SDP) | 没有 | 是 |
会话管理和缓存 | 是 | 是 |
电子商务应用 | 是 | 是 |
用户配置文件管理,AAA协议 | 是 | 是 |
NDB和InnoDB功能使用摘要
在将应用程序功能要求InnoDB
与with 的功能进行比较时NDB
,显然其中一些与一个存储引擎比其他存储引擎更兼容。
下表根据存储引擎列出了受支持的应用程序功能,每种功能通常更适合于这些存储功能。
根据存储引擎支持的应用程序功能,每种功能通常更适合
的首选应用程序要求InnoDB | 的首选应用程序要求NDB |
---|---|
|
|