Offenlegung: Ich bin ein MySQL-Mitarbeiter, der an MySQL Cluster arbeitet.
Ich würde sagen, dass MySQL Cluster einen höheren Durchsatz / Host erzielen könnte als Sharded MySQL + InnoDB, vorausgesetzt, dass:
- Abfragen sind einfach
- Alle Daten passen in den Speicher
In Bezug auf die Latenz sollte MySQL Cluster eine stabilere Latenz haben als Sharded-MySQL. Die tatsächliche Latenz für rein speicherinterne Daten könnte ähnlich sein.
Je komplexer Abfragen werden und Daten auf der Festplatte gespeichert werden, desto verwirrender wird der Leistungsvergleich. Um eine genauere Antwort zu erhalten, müssen Sie mehr über Ihre Anwendung und die von Ihnen ausgeführten Abfragen sowie die Anzahl der Hosts und das Datenvolumen beschreiben. MySQL Cluster hat kürzlich die parallele lokalisierte Abfrageausführung (AQL) erhalten, was bedeutet, dass es mit eigenständigem MySQLD konkurrenzfähig ist, obwohl Daten auf mehrere Hosts verteilt sind.
MySQL Cluster ist derzeit auf das 'Sharden' von mehr als 48 Hosts beschränkt. Sharded MySQL kennt theoretisch keine Grenzen. Für einen bestimmten Zieldurchsatz sind jedoch möglicherweise weniger MySQL-Cluster-Hosts erforderlich als für Sharded-MySQL-Hosts.
Interessanter sind die Unterschiede, wenn Sie sich andere Bereiche als die Leistung ansehen:
- MySQL Cluster unterstützt beliebige Abfragen über alle Shards hinweg
- MySQL Cluster unterstützt beliebige Transaktionen auf allen Shards
- MySQL Cluster unterstützt die synchrone Replikation von Shards mit automatischem Failover und Wiederherstellung
- MySQL Cluster unterstützt Online-Add-Node (Cluster-Erweiterung)
- Sharded MySQL ist mehr "roll your own"
Die Integration von Sharding in Ihre Anwendung bietet Ihnen ein maximales Skalierungspotenzial, erhöht jedoch die Komplexität und schränkt Ihre Flexibilität in Bezug auf shardübergreifende Abfragen und Vorgänge ein. Wenn Ihre Scherbe verfrüht ist, kann es die Wurzel einiger Probleme für Sie sein. Mit MySQL Cluster können Sie einige der Vorteile von Sharding nutzen, ohne Ihre Anwendung auf Single-Shard beschränken zu müssen.
In Bezug auf die vorherige Antwort einige Klarstellungen:
"Obwohl es sich bei MySQL Cluster um eine ACID-Beschwerde handelt, bietet es keine geeignete Speicher-Engine für Daten mit zusammengesetzten Schlüsseln."
MySQL Cluster unterstützt zusammengesetzte Primär- und Sekundärschlüssel. Ich bin mir nicht sicher, was nicht 'passend' ist. Vielleicht kann das vorherige Plakat erklären?
"Damit Daten mit denselben Schlüsselmerkmalen in einem bestimmten Satz von Datenknoten gespeichert werden, können Sie Folgendes tun:
- Schalten Sie alle Datenknoten offline, und lassen Sie nur die Datenknoten übrig, für die Sie Daten mit denselben Schlüsselmerkmalen speichern möchten.
- Laden Sie Ihre Daten in den MySQL-Cluster, der nur Ihre ausgewählten Datenknoten enthält
- Alle Datenknoten wieder online schalten "
Das ist falsch. Die Datenverteilung ist unabhängig davon, welche Knoten gerade online sind. MySQL Cluster unterstützt verschiedene Datenverteilungsschemata, um die von Ihnen beschriebenen Optimierungen zu unterstützen. Ich beschreibe die Datenverteilung in MySQL Cluster in einem Blog-Beitrag hier: Datenverteilung in MySQL Cluster