Clustering, Sharding oder einfache Partition / Replikation

9

Ich brauche einen Rat von Ihnen Experten zu diesem Thema. Die Sache ist, dass wir vor ein paar Tagen eine Facebook-Anwendung erstellt haben, die zum Glück sehr viral ist. Das Problem ist, dass unsere Datenbank WIRKLICH VOLL wird (einige Tabellen haben jetzt mehr als 25 Millionen Zeilen) und es kam zu dem Punkt Die App hat gerade aufgehört zu arbeiten, weil es eine Warteschlange von Tausenden und Abertausenden von Schreibvorgängen gab.

Ich muss eine Lösung implementieren, um diese App SCHNELL zu skalieren, aber ich bin mir nicht sicher, ob ich Sharding oder Clustering betreiben sollte, da ich nicht sicher bin, was die Vor- und Nachteile jedes einzelnen sind und ich dachte darüber nach Partition / Replication Ansatz, aber ich denke, das hilft nicht, wenn die Last auf die Schreibvorgänge ist?

    
asheinfeld 04.01.2011, 14:35
quelle

4 Antworten

0

Nun, um das zu verstehen, müssen Sie verstehen, wie MySQL mit Clustering umgeht. Es gibt zwei Möglichkeiten, dies zu tun. Sie können entweder Master-Master-Replikation oder NDB (Network Database) -Clustering durchführen.

Die Master-Master-Replikation wird nicht mit Schreiblasten helfen, da beide Master jeden ausgegebenen Schreibvorgang wiederholen müssen (so dass Sie nichts gewinnen).

NDB-Clustering funktioniert sehr gut für Sie, wenn und nur wenn Sie hauptsächlich Primärschlüssel-Lookups machen (da nur mit PK-Lookups NDB effizienter arbeiten kann als ein normales Master-Master-Setup). Alle Daten werden automatisch auf viele Server verteilt. Wie ich schon sagte, würde ich das nur berücksichtigen, wenn die meisten Ihrer Abfragen nichts anderes sind als PK-Lookups.

Damit bleiben zwei weitere Optionen übrig. Sharing und weg von MySQL.

Das Sharding ist eine gute Option, um eine Situation wie diese zu behandeln. Um das Sharding jedoch voll ausnutzen zu können, muss sich die Anwendung dessen bewusst sein. Sie müssten also zurückgehen und den gesamten Datenbankzugriffscode neu schreiben, um den richtigen Server für jede Abfrage auszuwählen. Und je nachdem, wie Ihr System derzeit eingerichtet ist, ist es möglicherweise nicht möglich, effektiv zu shard ...

Aber eine andere Option, von der ich denke, dass sie am besten zu Ihren Bedürfnissen passt, ist die Abkehr von MySQL. Da Sie Ihren DB-Zugriffscode trotzdem neu schreiben müssen, sollte es nicht schwierig sein, zu einer NoSQL-Datenbank zu wechseln (wieder abhängig von Ihrer aktuellen Konfiguration). Es gibt Tonnen von NoSQL-Servern da draußen, aber ich mag MongoDB . Es sollte in der Lage sein, Ihre Schreiblast ohne Sorgen zu überstehen. Achten Sie jedoch darauf, dass Sie wirklich einen 64-Bit-Server benötigen, um ihn ordnungsgemäß zu verwenden (mit Ihrem Datenvolumen).

    
ircmaxell 04.01.2011, 14:45
quelle
0

25 Millionen Zeilen ist eine völlig vernünftige Größe für eine gut konstruierte relationale Datenbank. Etwas, das Sie beachten sollten, ist jedoch, dass je mehr Indizes Sie haben (und je umfangreicher sie sind), desto langsamer Ihre Schreibvorgänge sein werden. Indizes sollen die Abfrageleistung auf Kosten der Schreibgeschwindigkeit verbessern. Stellen Sie sicher, dass Sie nicht über -indiziert sind.

Welche Art von Hardware treibt diese Datenbank an? Hast du genug RAM? Es ist viel einfacher, diese Attribute zu ändern, als komplexe RDBMS-Lastverteilungstechniken zu implementieren, vor allem, wenn Sie unter Zeitdruck stehen.

    
Adam Robinson 04.01.2011 17:09
quelle
0

Clustering / Sharding / Partitioning kommt zustande, wenn der einzelne Knoten den Punkt erreicht hat, an dem seine Hardware die Last nicht tragen kann. Aber Ihre Hardware hat noch Platz zum Erweitern. Dies ist die erste Lektion, die ich gelernt habe, als ich anfing, von solchen Problemen betroffen zu werden.

    
Abdel Hegazi 05.06.2017 11:20
quelle
-1

Die Replikation ist für die Datensicherung gedacht, nicht für die Performance, daher kommt sie nicht in Frage.

Nun, 8GB RAM ist immer noch nicht so viel Sie können viele hundert GB RAM mit ziemlich großen Festplattenspeicher haben und MySQL würde immer noch für Sie arbeiten.

Clustering / Sharding / Partitioning kommt zustande, wenn der einzelne Knoten den Punkt erreicht hat, an dem seine Hardware die Last nicht tragen kann. Aber Ihre Hardware hat noch Platz zum Erweitern.

Wenn Sie Ihre Hardware nicht aufrüsten möchten, müssen Sie mehr Informationen über den Datenbankentwurf geben und ob es viele Joins gibt oder nicht, so dass die oben genannten Optionen tief berücksichtigt werden können.

    
Gary Lindahl 11.09.2011 15:15
quelle