Skalierbarkeit der Verwendung von MySQL als Schlüssel / Wert-Datenbank

8

Ich bin daran interessiert, die Auswirkungen der Verwendung von MySQL als Schlüssel-Wert-Datenbank im Vergleich zu Redis / MongoDB / CouchDB zu verstehen. Ich habe in der Vergangenheit sowohl Redis als auch CouchDB verwendet, daher kenne ich ihre Anwendungsfälle sehr gut und weiß, dass es besser ist, Schlüssel / Wert-Paare in zB NoSQL vs. MySQL zu speichern.

Aber hier ist die Situation:

  • Der Großteil unserer Anwendungen hat bereits viele MySQL-Tabellen
  • Wir hosten alles auf Heroku (das nur MongoDB und MySQL hat und im Prinzip 1-db-Typ pro App ist)
  • wir wollen in diesem Fall nicht mehrere verschiedene Datenbanken verwenden.

Im Grunde genommen suche ich nach Informationen über die Skalierbarkeit einer Schlüssel / Wert-Tabelle in MySQL. Vielleicht auf drei verschiedenen willkürlichen Ebenen:

  • 1000 schreibt pro Tag
  • 1000 Schreibvorgänge pro Stunde
  • 1000 Schreibvorgänge pro Sekunde
  • 1000 Lesevorgänge pro Stunde
  • 1000 Lesevorgänge pro Sekunde

Ein praktisches Beispiel ist der Aufbau von Echtzeit-Webanalyse-Tracker von MixPanel , für die sehr oft geschrieben werden müsste auf Verkehr.

Wordpress und andere populäre Software verwenden dies die ganze Zeit: Post hat "Meta" -Modell, das nur Schlüssel / Wert ist, so dass Sie einem Objekt, das durchsucht werden kann, beliebige Eigenschaften hinzufügen können.

Eine andere Möglichkeit ist es, einen serialisierbaren Hash in einem Blob zu speichern, aber das scheint schlimmer zu sein.

Was ist Ihre Meinung?

    
Lance Pollard 19.06.2010, 23:03
quelle

4 Antworten

2

Es besteht kein Zweifel daran, dass die Verwendung einer NOSQL-Lösung schneller sein wird, da es einfacher ist NOSQL und Relational konkurrieren nicht miteinander, sie sind verschiedene Werkzeuge, die verschiedene Probleme lösen können.
Das heißt für 1000 Schreibvorgänge / Tag oder pro Stunde, MySQL wird kein Problem haben.
Für 1000 pro Sekunde benötigen Sie einige ausgefallene Hardware, um dorthin zu gelangen. Für die NOSQL-Lösung werden Sie wahrscheinlich noch ein verteiltes Dateisystem benötigen.

Es hängt auch davon ab, was Sie speichern.

    
Romain Hippeau 19.06.2010, 23:33
quelle
2

SQL -Datenbanken werden mehr und mehr als persistenter Layer verwendet, wobei Berechnungen und Lieferung in Key-Value repositories zwischengespeichert werden.

In diesem Sinne haben diese Jungs hier einen ziemlich großen Test gemacht:

  • InnoDB fügt 43.000 Datensätze pro Sekunde AT ITS PEAK *;
  • ein
  • TokuDB fügt 34.000 Datensätze pro Sekunde AT ITS PEAK *;
  • ein
  • Dieser KV fügt 100 Millionen Datensätze pro Sekunde ein (2.000+ mehr).

Um Ihre Frage zu beantworten, wird ein Key-Value -Repository MySQL wahrscheinlich um mehrere Größenordnungen übertreffen:

Verarbeitung von 100,000,000 -Elementen:

%Vor%

OK, dein Test war 1,000 ops pro Sekunde, aber es kann nicht schaden, 1,000 mal mehr machen zu können!

Siehe dies für weitere Details (sie vergleichen es auch mit Tokyo Cabinet ).

    
Marit 05.02.2011 19:37
quelle
1

Ich würde sagen, dass Sie Ihren eigenen Benchmark ausführen müssen, weil nur Sie die folgenden wichtigen Aspekte kennen:

  • die Größe der Daten, die in dieser KV-Tabelle gespeichert werden sollen
  • die Ebene der Parallelität, die Sie erreichen möchten
  • die Anzahl der vorhandenen Abfragen, die Ihre MySQL-Instanz erreichen

Ich würde auch sagen, dass Sie abhängig von den Haltbarkeitsanforderungen für diese Daten auch mehrere Engines testen möchten: InnoDB, MyISAM.

Obwohl ich davon ausgehe, dass manche NoSQL-Lösungen schneller sind, können Sie aufgrund Ihrer Einschränkungen herausfinden, dass MySQL gut genug für Ihre Anforderungen ist.

    
alexpopescu 20.06.2010 11:19
quelle
1

Sehen Sie sich die Blogserie hier an, in der der Autor Tests zum Vergleich der Leistung von MongoDB und MySQL durchführt und die Leistungsoptimierung von MySQL durchläuft Chaos. MongoDB machte ~ 100K Zeilenlesevorgänge pro Sekunde, MySQL im c / s-Modus machte 43K max, aber mit der eingebetteten Bibliothek schaffte er es, es auf 172K Zeilenlesevorgänge pro Sekunde zu bringen.

Es klingt ein wenig kompliziert, so hoch auf einem einzelnen Knoten zu kommen, also ymmv.

Die Schreib / Zweit-Frage ist ein wenig schwieriger, aber das könnte Ihnen noch einige Ideen für die Konfiguration geben.

    
mark 28.08.2012 17:59
quelle