Oracle 也有做失败的数据库系统?是的今天我们来说说他
But the way MySQL Cluster splits data in a sharded manner over the data node pairs means that it supports queries best if they are lookups for specific rows by their primary key. Range queries likely have to span many data nodes. Join queries also have to span many data nodes. Complex reporting queries have terrible performance.
Many people who don't understand this tradeoff attempt to port their existing application to use MySQL Cluster, and are disappointed in the performance. It may give no improvement over using InnoDB, or it can even show a drop in performance.
This isn't a weakness of MySQL Cluster -- it's a weakness of a physically sharded architecture in general.
但是 MySQL Cluster 在数据节点对上以分片方式分割数据的方式意味着,如果查询是通过主键查找特定行,它最支持查询。范围查询可能必须跨越许多数据节点。连接查询也必须跨越许多数据节点。复杂的报告查询性能很差。 许多不理解这种权衡的人试图将他们现有的应用程序移植到使用 MySQL 集群,并对性能感到失望。它可能不会比使用 InnoDB 有任何改进,甚至会显示性能下降。 这不是 MySQL Cluster 的弱点 —— 这是一般物理分片架构的弱点。
这上面这位仁兄的解释是,不支持复杂查询不是MySQL Cluster的弱点,而是分片结构的弱点。
硬件预算。您需要大量服务器,而每台服务器都需要大量 RAM。您可能还需要将集群放在专用子网上,并为您的所有主机购买高端 NIC。软件是免费的,但基础设施和操作可能很昂贵。 配置和调优知识。NDB 不是 MySQL 站点中最常用的存储引擎 InnoDB。所以很多调优智慧和留档并不适用。找到能够有效操作 MySQL 集群站点的 DBA 很难。或者你可以从一个有主流 MySQL 知识的称职 DBA 开始,给他们时间来培训 NDB,但这也既耗时又昂贵。 模式设计。任何分片架构都需要有一个旨在利用分片的模式。如果查询只触及一个分片,查询效果很好。但有时您还需要运行一个范围查询,该查询将触及所有分片。我的雇主Percona为几家公司提供咨询,他们阅读了 MySQL 集群的高基准数字,因此他们简单地将现有应用程序导入 MySQL 集群实例,发现它比使用传统 MySQL 实例时性能更差。
上面一些国外数据库专家为MySQL Cluster的辩解,让我们可以窥见更多的MySQL Cluster的缺陷。
总结为:
1、需要大内存,以及更多的主机,因为数据全部要在内存中处理
2、数据的格式和数据的操作方式,并不和MySQL完全兼容
3、之前在MySQL可以很好解决的一般复杂SQL查询的问题,在NDB集群并不能很好的解决
4、现有的应用程序,如果构建在MySQL上,是无法安全的且完全的移植到
5、应该主键查询,且对于范围查询十分的不友好。
而官方的我找到的MYSQL CLUSTER的文档,对于以上问题,一概不谈,都是围绕数据库的高可用去谈论数据库产品的,对于数据查询的难点,和应用的改造只字不提。
后来查了一下这个系统的历史,这个系统并不是Oracle自研的,而是收购Ericsson 而来了,而当初这个系统的产生完全是针对电信行业特定的系统而生,并不是为了广泛的数据库应用而设定的。
所以从上述的信息收集和信息的分析,MySQL Cluster本身就不是为了广泛的数据库客户服务的,他出自瑞典爱立信的内部的数据库系统。
最后根据网络查询的NDB的问题点总结如下:
1、核心是同步内存分布式架构,shared Nothing In Memory
2、数据节点全部内存驻留,虽然后期支持磁盘,但是性能会急剧下降
3、所有更新操作都需要两阶段在多个节点提交完成,节点数量变大将导致写放大,和网络数据同步的消耗变大
4、无法完成JOIN 的数据查询,导致数据库无法完成普通数据库可以完成的任务,官方建议使用 KEY VALUE进行数据的提取和存储。
5、系统没有分布式性能优化器,仅仅支持 RC的隔离级别
6、对于MYSQL 本身支持的功能不支持,全文索引,空间索引,约束,外键,触发器,存储过程,等
7、管理极其复杂,包含了 NDB_MGMD , NDBD ,MYSQLD 等组件配置极其复杂对于系统启动顺序要求非常敏感。
写到这里,让我想起另一个数据库的类似杰作,POSTGRESQL XL XC系统。
另外一些论坛中对于NDB系统的有一个用户的评价,就怕出问题,出了问题,一修就是半天。
综上所述,MySQL CLUSTER 系统是一个ORACLE 在自己数据库产品中失败的杰作,收购,且针对极为特殊的业务场景,与当前的大部分数据库系统相比,无法完成基本的JOIN SQL查询的工作,系统扩展后,并不能得到系统的性能提升,种种问题。