Es ist weit verbreitet, dass Redis "Blazing Fast" ist und mongoDB auch schnell ist. Aber ich habe Probleme, tatsächliche Zahlen zu finden, die die Ergebnisse der beiden vergleichen. Ist Redis bei ähnlichen Konfigurationen, Funktionen und Vorgängen (und zeigt möglicherweise, wie sich der Faktor bei unterschiedlichen Konfigurationen und Vorgängen ändert) usw. 10x schneller?, 2x schneller?, 5x schneller?
Ich spreche NUR von Leistung. Ich verstehe, dass mongoDB ein anderes Tool ist und einen umfangreicheren Funktionsumfang hat. Dies ist nicht die Debatte "Ist MongoDB besser als Redis". Ich frage, um welchen Vorsprung übertrifft Redis mongoDB?
Zu diesem Zeitpunkt sind sogar billige Benchmarks besser als keine Benchmarks.
mongodb
benchmarking
redis
Homer6
quelle
quelle
Antworten:
Grobe Ergebnisse aus dem folgenden Benchmark: 2x Schreiben, 3x Lesen .
Hier ist ein einfacher Benchmark in Python, den Sie an Ihre Zwecke anpassen können. Ich habe mir angesehen, wie gut jeder einzelne funktioniert, wenn er einfach Werte setzt / abruft:
Ergebnisse für mit mongodb 1.8.1 und redis 2.2.5 und neuestem pymongo / redis-py:
Nehmen Sie die Ergebnisse natürlich mit einem Körnchen Salz! Wenn Sie in einer anderen Sprache programmieren, andere Clients / andere Implementierungen usw. verwenden, variieren Ihre Ergebnisse stark. Ganz zu schweigen davon, dass Ihre Nutzung völlig anders sein wird! Am besten vergleichen Sie sie selbst, genau so, wie Sie sie verwenden möchten. Als Konsequenz werden Sie wahrscheinlich herausfinden, wie Sie jeden einzelnen am besten nutzen können. Immer Benchmark für sich selbst!
quelle
Bitte lesen Sie diesen Beitrag über die Analyse der Einfügungsleistung von Redis und MongoDB:
quelle
Guter und einfacher Benchmark
Ich habe versucht, die Ergebnisse mit den aktuellen Versionen von redis (2.6.16) und mongo (2.4.8) erneut zu berechnen. Hier ist das Ergebnis
Auch dieser Blog-Beitrag vergleicht beide, verwendet jedoch node.js. Es zeigt den Effekt einer zunehmenden Anzahl von Einträgen in der Datenbank zusammen mit der Zeit.
quelle
Zahlen werden schwer zu finden sein, da sich die beiden nicht ganz im selben Raum befinden. Die allgemeine Antwort lautet, dass Redis 10 - 30% schneller ist, wenn der Datensatz in den Arbeitsspeicher einer einzelnen Maschine passt. Sobald diese Datenmenge überschritten ist, schlägt Redis fehl. Mongo verlangsamt sich mit einer Menge, die von der Art der Ladung abhängt. Für einen Lasttyp nur für Einfügungen meldete ein Benutzer kürzlich eine Verlangsamung um 6 bis 7 Größenordnungen (10.000 bis 100.000 Mal), aber dieser Bericht gab auch zu, dass es Konfigurationsprobleme gab und dass dies eine sehr atypische Arbeitslast war. Normale Leselastlasten verlangsamen sich anekdotisch um das 10-fache, wenn einige der Daten von der Festplatte gelesen werden müssen.
Fazit: Redis wird schneller sein, aber nicht viel.
quelle
Hier ist ein ausgezeichneter Artikel über die Sitzungsleistung im Tornado-Framework, der ungefähr 1 Jahr alt ist. Es gibt einen Vergleich zwischen einigen verschiedenen Implementierungen, von denen Redis und MongoDB enthalten sind. Die Grafik im Artikel zeigt, dass Redis in diesem speziellen Anwendungsfall um etwa 10% hinter MongoDB liegt.
Redis verfügt über einen integrierten Benchmark, der die Leistung der Maschine analysiert, auf der Sie sich befinden. Im Benchmark-Wiki für Redis gibt es eine Menge Rohdaten davon . Aber vielleicht müssen Sie sich ein bisschen nach Mongo umsehen. Wie hier , hier und einige zufällige polnische Zahlen (aber es gibt Ihnen einen Ausgangspunkt, um einige MongoDB-Benchmarks selbst auszuführen).
Ich glaube, die beste Lösung für dieses Problem besteht darin, die Tests in den von Ihnen erwarteten Situationen selbst durchzuführen.
quelle
In meinem Fall war der verwendete MongoDb WriteConcern ein entscheidender Faktor für den Leistungsvergleich. Die meisten Mongo-Treiber setzen heutzutage das Standard-WriteConcern auf ACKNOWLEDGED, was "in den RAM geschrieben" bedeutet ( Mongo2.6.3-WriteConcern ). In dieser Hinsicht war es für die meisten Schreibvorgänge sehr vergleichbar mit Redis.
Die Realität hängt jedoch von Ihren Anwendungsanforderungen und dem Setup der Produktionsumgebung ab. Möglicherweise möchten Sie dieses Problem in WriteConcern.JOURNALED (auf oplog geschrieben) oder WriteConcern.FSYNCED (auf die Festplatte geschrieben) oder sogar in Replikatsätze (Backups) ändern. wenn es benötigt wird.
Dann kann es zu Leistungseinbußen kommen. Weitere wichtige Faktoren sind die Optimierung Ihrer Datenzugriffsmuster, der Indexfehler% (siehe Mongostat ) und die Indizes im Allgemeinen.
quelle
Ich denke, dass das 2-3X auf dem gezeigten Benchmark irreführend ist, denn wenn Sie es auch von der Hardware abhängen, auf der Sie es ausführen - meiner Erfahrung nach ist die Lücke umso größer, je stärker die Maschine ist (zugunsten von Redis). wird sein, wahrscheinlich durch die Tatsache, dass der Benchmark die Speichergrenzen ziemlich schnell erreicht.
Was die Speicherkapazität betrifft, so ist dies teilweise richtig, da es auch Möglichkeiten gibt, dies zu umgehen. Es gibt (kommerzielle) Produkte, die Redis-Daten auf die Festplatte zurückschreiben, sowie Cluster-Lösungen (Multi-Sharded), die die Speichergröße überwinden Einschränkung.
quelle