MySQL Sharding gegen MySQL Cluster

12

Kann ein MySQL-Cluster eine benutzerdefinierte Daten-Sharding-MySQL-Lösung schlagen, wenn man nur die Leistung betrachtet ? Scherben = horizontale Unterteilung

Wenn ich von Sharding spreche, denke ich über Sharding in der Anwendungsebene nach, um beispielsweise Datensätze gleichmäßig auf unabhängige MySQL-Instanzen zu verteilen. Für zwei Server könnte es sein (Key Mod 2).

gsb
quelle

Antworten:

21

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:

  1. Schalten Sie alle Datenknoten offline, und lassen Sie nur die Datenknoten übrig, für die Sie Daten mit denselben Schlüsselmerkmalen speichern möchten.
  2. Laden Sie Ihre Daten in den MySQL-Cluster, der nur Ihre ausgewählten Datenknoten enthält
  3. 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

Frazer Clement
quelle
Hey, Frazier. Ich habe den von Ihnen angegebenen Link gelesen. Nur zur Verdeutlichung basierte mein "zusammengesetzter Schlüssel" -Kommentar auf nicht eindeutigen Indizes. Das Unternehmen meines Arbeitgebers hat MySQL Cluster um das erste Quartal 2007 herum ausprobiert und mochte es wegen schlechter Leistung nicht. IMHO war es die schlechte Wahl des Kunden für Schlüssel (kleine Kardinalitäten) und seine Fragen. MySQL Cluster muss seitdem basierend auf Ihrem Link reifer geworden sein. In Bezug auf meine zweite Aussage ist dies die Anzahl der MongoDB-Benutzer, die bestimmte Shards bevölkern. Einige Kunden meines Arbeitgebers haben dies mit ihren benutzerdefinierten MySQL-Setups getan.
RolandoMySQLDBA
In Ihrem Link wurde "ein geordneter Index-Scan" erwähnt, der nicht entfernt werden konnte, da nicht garantiert wird, dass übereinstimmende Zeilen in einem Tabellenfragment gespeichert werden. Aus diesem Grund schlug ich vor, Daten auf bestimmte Shards (Datenknoten) zu isolieren, um die Bereiche zu minimieren, in denen sich Daten ausbreiten würden. Da Ihre Antwort die positive Seite von MySQL Cluster hervorhebt, passt sie besser zur ursprünglich gestellten Frage. Meine Antwort spricht gegen Vorsicht, Pessimismus und eine gewisse Naivität gegenüber der heutigen Leistung von MySQL Cluster.
RolandoMySQLDBA
Anstelle meiner Schimpfen und Toben, +1 für deine Antwort !!!
RolandoMySQLDBA
Hallo Rolando, vielen Dank für die Klarstellung Ihrer Aussagen. Es stimmt, dass nicht beschnittene geordnete Index-Scans im Cluster "teuer" sind, da alle Datenknoten beteiligt sind. Es hört sich so an, als ob diese Scans bei niedrigen Kardinalitätsindexen auf jedem System teuer wären, aber bei Cluster wurden sie sichtbar teuer. Ihre Vorsicht und Ihr Pessimismus haben Sie zweifellos mehr als einmal gerettet :) Vielen Dank für den +1
Frazer Clement