架构
分为管理阶段、SQL节点和数据节点。
![image](https://dev.mysql.com/doc/refman/5.7/en/images/cluster-components-1.png)
数据组:每个数据组包含多个数据节点,组内数据节点的数据相同。不同组见的数据节点不同。同一个组内每个节点具有相同的分区。
![image](https://dev.mysql.com/doc/refman/5.7/en/images/replicas-groups-1-1.png)
NDB硬件要求
- 多台电脑:多个节点也可部署在一台电脑上。
- 网络:数据同步依赖于网络,最低100M网络,最好有独立的子网。
- 内存:==所有数据存储在内存==,对内存要求较高
NDB限制
见官网文档
NDB与InnoDB
区别
功能 | InnoDB 1.1 | NDB Cluster NDB 7.5 |
---|
MySQL Server Version | 5.7 | 5.7 |
InnoDB 版本 | InnoDB 5.7.18 | InnoDB 5.7.18 |
NDB Cluster版本 | N/A | NDB 7.5.6 |
数据量限制 | 64TB | 3TB(Practical upper limit based on 48 data nodes with 64GB RAM each; can be increased with disk-based data and BLOBs) |
外键支持 | 是 | 是 |
事物 | 所有标准类型 | READ COMMITTED |
MVCC | 是 | 否 |
数据压缩 | 是 | 否(NDB Cluster checkpoint and backup files can be compressed) |
大数据行支持 (> 14K) | 支持 VARBINARY、VARCHAR、BLOB、TEXT列 | 只支持BLOB、TEXT列(大量使用将降低性能) |
复制支持 | 基于MySQL Replication的异步和半同步复制 | NDB Cluster自动同步复制,同时支持基于MySQL Replication的异步复制 |
读可扩展性 | 支持 (MySQL Replication) | 支持 (Automatic partitioning in NDB Cluster ; NDB Cluster Replication) |
写可扩展性 | 需要应用程序分区 (sharding) | 支持(NDB Cluster自动分区) |
高可用性 | 需要其他软件支持 | 支持 (为99.999%可用设计) |
节点失效恢复 | 需要其他软件支持 | 自动(NDB Cluster架构的关键要素) |
节点失效恢复时间 | 30秒或更长 | 典型情况下小于1秒 |
实时性能 | 否 | 是 |
内存表 | 否(内存数据不具有持久性) | 是(以下数据可选择防止磁盘;内存和磁盘数据都具有持久性) |
NoSQL访问存储引擎 | 是 | 是(支持多种协议,包括Memcached、 Node.js/JavaScript、Java、JPA、C++和 HTTP/REST) |
并发和并行写 | 不支持 | 最多48同时写, 为concurrent writes优化 |
冲突检测和解决 (多主复制时) | 否 | 是 |
Hash索引 | 否 | 是 |
在线添加节点 | Read-only replicas using MySQL Replication | Yes (all node types) |
在线升级 | 否 | 是 |
在线schma修改 | 是 | 是 |
使用场景
场景 | InnoDB | NDB Cluster(NDB) |
---|
大容量OLTP应用 | 是 | 是 |
DSS应用 (数据集市、分析) | 是 | 限制 (跨OLTP数据库连接操作不能大于3TB数据量) |
Custom Applications | 是 | 是 |
Packaged Applications | 是 | 限制(应主要采用主键访问).NDB Cluster 7.5 开始支持外键. |
In-Network Telecoms Applications (HLR, HSS, SDP) | 否 | 是 |
会话管理和缓存 | 是 | 是 |
电子商务 | 是 | 是 |
User Profile Management, AAA Protocol | 是 | 是 |
优劣比较
倾向使用InnoDB场景 | 倾向使用NDB场景 |
---|
外键,注NDB7.5开始支持外键 | 写横向扩展 |
全表扫描 | 99.999%可用时间 |
很大的数据库\数据行\事物 | 在线添加节点和schema操作 |
需要READ COMMITTED外的事物支持 | 多SQL或NoSQL API需求 |
- | 实时性能 |
- | 有限的使用Blob列 |
- | 7.5可以支持外键,虽然在高吞吐量下会有性能影响 |