2010-11-20 23 views
1

Hallo Freunde Ich benutze MySQL DB für eines meiner Produkte, etwa 250 Schulen sind dafür jetzt angesagt, es ist etwa 1500000 Einfügung pro Stunde und etwa 12000000 Einfügung pro Tag, ich denke mein jetziges Setup wie nur ein einziger Server kann abstürzen mit in Stunden, und das Lesen ist auch das gleiche wie schreiben, wie kann ich es crash free DB Server machen, das Hauptproblem, mit dem ich jetzt konfrontiert ist, ist das langsam von Schreiben und Lesen von Daten, wie kann ich kommen, dass es sehr schwierig ist für mich eine lösung zu bekommen. bitte helfen sie mir .. was ist das gute modell für die lösung?Wie schnell Daten zu lesen und Daten in MySQL schreiben?

+2

Neugierig - welches Produkt ist das? –

+0

ein Schüler-Management-System..wie so viele Schulen sind in unterzeichnet ... etwa 600 Schüler pro Schule machen dies eine große Daten benötigt ... –

+0

@Alex Mathew: Sie fügen so viele Daten gleichzeitig? Bist du sicher? – jwueller

Antwort

1

Mein ungezwungene Rat:

  • Erstellen Sie Anwendung leicht. Verwenden Sie keine High-Level-Datenbankabstraktionsschicht wie Active Record. Sie saugen beim Skalieren.
  • Erfahren Sie viel über mysql permformance.
  • Erfahren Sie mehr über MySQL-Replikation.
  • Erfahren Sie mehr über Lastverteilung.
  • Erfahren Sie mehr über Speichercaches. (memcached)
  • Mieten Sie einen Administrator (mit anständigen MySQL-Kenntnisse) oder Web-Anwendung Leistung Guru/Berater.

Die konkrete Strategie hängt von Ihrer Anwendung und deren Verwendung ab. Mysql-Replikation, kann oder kann nicht angemessen sein (Gleiches gilt für die erwähnte sharding-Strategie). Aber es ist eine ziemlich einfache Möglichkeit, etwas Skalierung zu erreichen, weil es nicht zu viel Einfluss auf Ihr Anwendungsdesign hat. In Arbeitsspeicher können Caches eine gewisse Last von Ihren Datenbanken fernhalten, aber sie brauchen etwas Arbeit und einige Kompromisse. Am Ende benötigen Sie ein gutes Verständnis dafür, wie Sie mit einer datenbankbasierten Anwendung unter hoher Last umgehen. Wenn Sie einen engen Termin haben, fügen Sie externe Arbeitskräfte hinzu, weil Sie dies nicht innerhalb von 6 Wochen ohne Erfahrung tun werden.

2

Es ist schwierig, gleichzeitig schnelle Lese- und Schreibvorgänge durchzuführen. Um schnelle Lesevorgänge zu erhalten, müssen Sie Indizes hinzufügen. Um schnelle Schreibvorgänge zu erhalten, brauchen Sie nur wenige Indizes. Und um beide schnell zu machen, dürfen sie sich nicht gegenseitig einschließen.

Je nach Bedarf besteht eine Lösung darin, zwei Datenbanken zu haben. Schreiben Sie neue Daten in Ihre Live-Datenbank, und wenn es ruhig ist, können Sie die Daten gelegentlich mit einer anderen Datenbank synchronisieren, in der Sie Abfragen ausführen können. Der Nachteil dieses Ansatzes ist, dass die gelesenen Daten etwas alt sind. Dies kann oder kann kein Problem sein, abhängig davon, was Sie tun müssen.

3

~ 500 Einsätze pro Sekunde ist in der Tat nichts zu niesen.

Für eine flexible Lösung möchten Sie vielleicht eine Art von Sharding implementieren. Die wahrscheinlich einfachste Lösung besteht darin, Schulen im Vorfeld in Gruppen zu unterteilen und Daten für verschiedene Gruppen von Schulen auf verschiedenen Servern zu speichern. Z. B. sind Daten für Schulen 1-10 auf Server A, Schulen 11-20 auf Server B usw. gespeichert. Dies ist nahezu unbegrenzt skalierbar, unter der Annahme, dass es wenige Beziehungen zwischen Daten von verschiedenen Schulen gibt.

Sie könnten auch versuchen, mehr PS auf das Problem zu werfen und in ein RAID von SSD-Laufwerken investieren und, vorausgesetzt, Sie haben genug Rechenleistung, sollten Sie in Ordnung sein. Wenn es sich um eine riesige Datenbank handelt, reicht die Kapazität von SSD-Laufwerken möglicherweise nicht aus.

Zum Schluss, ob Sie die Anzahl der Einfügungen reduzieren können, zum Beispiel durch Denormalisierung der Datenbank. Sagen Sie, anstatt die Anwesenheit für jeden Schüler in einer separaten Zeile zu speichern, fügen Sie die Anwesenheit der gesamten Klasse als Vektor in einer einzelnen Zeile ein. Solche Änderungen werden Ihre Abfragefunktionen natürlich stark einschränken.

+0

thks für den Kommentar .... wie kann ich Sharding und verbinden Sie es mit PHP ?? –