分享

NDB和InnoDB存储引擎比较

 读百遍书 2020-02-11

说明

首先MySQL提供了众多的存储引擎供用户使用,但是支持事务的存储引擎并不多:NDB和InnoDB两个。但是NDB只支持在NDB集群中使用,并不支持在其他场景下使用。下面我们主要讨论它们之间不同的地方,各自的优缺点方便用户根据自己的实际情况进行选项。

注:在NDB集群中,只支持NDB存储引擎的表,其他存储引擎的表将不会被集群化。

NDB和InnoDB的不同点

NDB需要通过一个分布式集群来使用,采用的不共享任何数据、组件的集群,无单点故障。

  • 以MySQL8.0,NDB8.0版本为例:
    而对于MySQL5.7,NDB7.5/7.6版本没有区别,除了数据库版本之外。
特性 InnoDB (MySQL 8.0) NDB 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主要关心的需求

  • 外键

    注: NDB 集群 8.0支持外键

  • 全表扫描
  • 非常大的数据、行或事物
  • READ COMMITTED以外的事务类型

使用NDB主要关心的需求

  • NDB 集群8.0支持外键
  • 写分离
  • 99.999%的运行可靠性
  • 在线添加节点、在线修改
  • 多个SQL 和NoSQL API
  • 实时性能
  • BLOB列限制使用
  • 支持外键

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多