MySQL分片与MySQL集群


13

考虑性能,MySQL集群能否击败自定义数据分片MySQL解决方案?分片=水平分区

当我提到分片时,我考虑的是在应用程序层中进行的分片,例如,在独立的MySQL实例之间平均分配记录。对于两个服务器,可能是(密钥mod 2)。

Answers:


21

披露:我是一名MySQL员工,致力于MySQL Cluster。

我要说的是,MySQL Cluster比分片的MySQL + InnoDB可以实现更高的吞吐量/主机,前提是:

  • 查询很简单
  • 所有数据都适合存储

在延迟方面,MySQL Cluster应该比分片的MySQL具有更稳定的延迟。纯内存数据的实际延迟可能相似。

随着查询变得越来越复杂,并且数据存储在磁盘上,性能比较也变得更加混乱。为了获得更具体的答案,您需要描述有关您的应用程序和所执行的查询以及主机数量和数据量的更多信息。MySQL Cluster最近获得了并行的本地化查询执行(AQL),这意味着,尽管数据分布在多个主机上,它仍可以与独立的MySQLD竞争。

MySQL Cluster目前仅限于“分片” 48台主机。从理论上讲,分片MySQL没有限制。但是,对于给定的目标吞吐量,与分片的MySQL主机相比,可能需要更少的MySQL Cluster主机。

当您关注性能以外的领域时,更有趣的区别是:

  • MySQL Cluster支持所有分片上的任意查询
  • MySQL Cluster支持所有分片上的任意事务
  • MySQL Cluster通过自动故障转移和恢复支持碎片的同步复制
  • MySQL Cluster支持在线添加节点(集群扩展)
  • 分片MySQL更像是“自己动手”

在应用程序中内置分片可为您提供最大的扩展潜力,但在跨分片查询和操作方面会增加复杂性并限制您的灵活性。如果分片为时过早,那么这可能是您遇到一些问题的根源。MySQL Cluster使您可以获得分片的一些好处,而不必将应用程序限制为仅单分片。

关于先前的答案,一些澄清:

“尽管MySQL Cluster是ACID兼容的,但它没有为带有复合键的数据提供合适的存储引擎。”

MySQL Cluster支持复合主键和辅助键。不知道什么不适合。也许以前的海报可以解释?

“为了将具有相同关键特征的数据存储在一组特定的数据节点中,可以执行以下操作:

  1. 使所有数据节点脱机,仅保留要保留具有相同关键特征的数据的那些数据节点。
  2. 将数据加载到MySQL群集中,该群集仅填充您选择的数据节点
  3. 使所有数据节点重新联机”

这是不正确的。数据分发与任何时间随时在线的节点无关。MySQL Cluster支持各种数据分配方案,以支持您描述的优化。我在这里的博客文章中描述了MySQL Cluster中的数据分发:MySQL Cluster中的数据分发


嘿,弗雷泽 我阅读了您提供的链接。只是为了说明,我的“复合键”注释基于非唯一索引。我的雇主的公司在2007年第一季度尝试了MySQL Cluster,但由于性能不佳而不喜欢它。恕我直言,这是客户对密钥(小基数)及其查询的不佳选择。从那时起,基于您的链接,MySQL Cluster必须更加成熟。关于我的第二个陈述,这是多少MongoDB用户填充特定的分片。我的一些雇主客户使用其自定义MySQL设置来完成此操作。
RolandoMySQLDBA 2011年

在您的链接中,它提到了无法修剪的“有序索引扫描”,因为不能保证将匹配的行存储在一个表片段中。这就是为什么我建议将数据隔离到特定的碎片(数据节点)以最大程度地减少数据传播的地方。由于您的回答带出了MySQL Cluster的积极方面,因此它更适合原始发布的问题。我的回答是偏向谨慎,悲观,以及今天对MySQL Cluster功能有些天真。
RolandoMySQLDBA 2011年

代替我的怒吼和赞美,为您的答案+1!
RolandoMySQLDBA 2011年

您好罗兰多,感谢您澄清您的发言。确实,在集群中,非修剪的有序索引扫描是“昂贵的”,因为涉及所有数据节点。听起来这些低基数索引的扫描在任何系统上都是昂贵的,但是在Cluster上它们显然变得昂贵。您的谨慎和悲观态度无疑为您节省了不止一次:)感谢+1
Frazer Clement
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.