Clustering, Splitter oder einfache Partition / Replikation
Brauche ich einige Ratschläge von Euch Experten zu diesem Thema. Die Sache ist, dass wir haben eine Facebook-Anwendung einige Tage her, und es hat eine Menge von Viralität zum Glück, das problem ist, dass unsere Datenbank angefangen, sich WIRKLICH VOLL (einige Tabellen haben mehr als 25 Millionen Zeilen jetzt) und es kam zu dem Punkt, dass die app nur aufgehört zu arbeiten, da gab es eine Schlange von tausenden und Abertausenden von schreiben gemacht.
Brauche ich, um zu implementieren eine Lösung für die Skalierung dieser app SCHNELL, aber ich bin mir nicht sicher, ob ich verfolgen sollte, Splitter oder Clustering da ich nicht sicher bin, was sind die pro 's und con' s eines jeden von Ihnen, und ich dachte an eine Partition /Replikations-Ansatz, aber ich glaube, dass hilft nicht, wenn die Last auf der schreibt?
- Mit den Grundlagen beginnen - Sie haben die Indizes im Ort? Sind Sie die richtigen Indizes für die Anwendung?
- Ja, ich habe eine Menge von Indizes in Ort, und Sie sind es definitiv die richtigen sind, wir sind nicht zu sehen, langsame Abfragen, aber nur eine unglaublich große Menge von Anleitungen schreiben.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gut, um das zu verstehen, müssen Sie verstehen, wie MySQL behandelt clustering. Es gibt 2 Möglichkeiten, es zu tun. Sie können entweder die Master-Master-Replikation, oder der NDB (Network Database) - clustering.
Master-Master-Replikation wird nicht helfen, mit schreiben Lasten, da die beiden Meister müssen replay jedes einzelne schreiben ausgestellt (Sie sind also nicht zu gewinnen alles).
NDB clustering wird sehr gut für Sie arbeiten, wenn, und nur wenn Sie das tun, meist primary key lookups (da nur mit PK-lookups können NDB arbeiten effizienter als ein normaler master-master-setup). Alle Daten werden automatisch partitioniert, unter vielen Servern. Wie ich schon sagte, ich würde nur Bedenken Sie dies, wenn der Großteil der Suchanfragen sind nichts anderes als PK-lookups.
Also bleiben zwei Optionen. Splitter und Weg von MySQL.
Splitter ist eine gute option für den Umgang mit einer situation wie dieser. Um jedoch den vollen nutzen der Splitter, die Anwendung muss sich bewusst sein, es. So würden Sie brauchen, um gehen Sie zurück und schreiben alle den Datenbank-Zugriff auf code, um wählen Sie die richtigen server zu sprechen, um für jede Abfrage. Und je nachdem, wie Ihr system derzeit-setup, kann es nicht möglich sein, effektiv zu Splitter...
Aber eine andere option, die ich denken kann an Ihre Bedürfnisse am besten ist der Wechsel Weg von MySQL. Da bist du gehen zu müssen, um schreiben Sie Ihre DB-Zugriff-code sowieso, es sollte nicht allzu schwer zu wechseln, um eine NoSQL-Datenbank (wieder, je nach der aktuellen Konfiguration). Es gibt Unmengen von NoSQL-Server die es gibt, aber ich mag MongoDB. Es sollte in der Lage sein zu widerstehen, Ihrem schreiben laden ohne sorgen. Nur Vorsicht, dass Sie wirklich brauchen eine 64-bit-server um es richtig zu nutzen (mit dem Daten-volume).
25 Millionen Zeilen ist eine völlig vernünftige Größe für einen gut-konstruierten relationalen Datenbank. Sowas sollte man im Hinterkopf behalten, jedoch, dass je mehr Indizes Sie haben (und je Ausführlicher diese sind), die langsamer Ihr schreibt wird. Indizes zur Verbesserung der Abfrageleistung zu Lasten der Schreibgeschwindigkeit. Werden Sie sicher, dass Sie nicht über-indiziert.
Welche Art von hardware wird gestartet diese Datenbank? Hast du genug RAM? Es ist viel einfacher, diese Attribute ändern, als zu versuchen ihn umzusetzen komplexen RDBMS-load-balancing-Techniken, besonders wenn Sie unter Zeitdruck.
Clustering/Splitter/Partitionierung kommt, wenn einzelne Knoten erreicht hat, bis zu dem Punkt, wo die hardware nicht die Last tragen. Aber deine hardware ist noch Platz zum erweitern.
Dies ist die erste Lektion, die ich gelernt, als ich anfing, trifft solche Fragen
Replikation für backup-Daten nicht für die Leistung, so seine Frage.
Gut, 8GB RAM immer noch nicht, dass viel Sie können viele hundert GB RAM mit ziemlich großen Festplattenspeicher und MySQL wäre noch für Sie arbeiten.
Clustering/Splitter/Partitionierung kommt, wenn einzelne Knoten erreicht hat, bis zu dem Punkt, wo die hardware nicht die Last tragen. Aber deine hardware ist noch Platz zum erweitern.
Wenn Sie nicht möchten, dass Ihre hardware aktualisieren, dann müssen Sie, um mehr Informationen über Datenbank-design und wenn es gibt eine Menge von joins oder nicht, so dass den oben genannten Möglichkeiten kann als tief.