Cassandra geringe Leistung?

8

Ich muss Cassandra oder MongoDB (oder eine andere nosql-Datenbank, ich akzeptiere Vorschläge) für ein Projekt mit vielen Einfügungen (1M / Tag) wählen. Also erstelle ich einen kleinen Test, um die Schreibleistung zu messen. Hier ist der Code zum Einfügen in Cassandra:

%Vor%

Und der Code, der in Mongo eingefügt werden soll, ändert sich auch die Verbindungsfunktion:

%Vor%

Die Ergebnisse sind ~ 1046 Sekunden zum Einfügen in Kassandra und ~ 437 zum Beenden in Mongo. Es wird angenommen, dass Cassandra viel schneller ist, als Mongo Daten einfügt. Also, Was mache ich falsch?

    
fasouto 26.01.2011, 12:36
quelle

5 Antworten

12

Es gibt kein Äquivalent zu Mongos unsicheren Modus in Cassandra. (Wir hatten einen, aber wir haben ihn rausgenommen, weil es nur eine schlechte Idee ist.)

Das andere Hauptproblem ist, dass Sie Singlethread-Inserts machen. Cassandra ist für hohe Parallelität ausgelegt; Sie müssen einen Multithread-Test verwenden. Sehen Sie das Diagramm unten in Ссылка (die tatsächlichen Zahlen sind seit einem Jahr veraltet, aber die Prinzip ist immer noch wahr).

In der Cassandra-Quellenverteilung ist ein solcher Test in contrib / stress enthalten.

    
jbellis 26.01.2011, 14:51
quelle
4

Wenn ich mich nicht irre, können Sie in Cassandra angeben, ob Sie eine MongoDB-äquivalente "Safe Mode" -Einfügung durchführen. (Ich erinnere mich nicht den Namen dieses Features in Cassandra)

Mit anderen Worten, Cassandra kann so konfiguriert werden, dass sie auf die Festplatte schreibt und dann im Gegensatz zur MongoDB-Standardkonfiguration zurückkehrt, die sofort nach der Ausführung einer Einfügung ohne zu wissen zurückkehrt, wenn die Einfügung erfolgreich war oder nicht. Es bedeutet nur, dass Ihre Anwendung niemals auf einen Pass / Fail vom Server wartet.

Sie können dieses Verhalten ändern, indem Sie den abgesicherten Modus in MongoDB verwenden, aber dies hat bekanntermaßen einen großen Einfluss auf die Leistung. Aktivieren Sie den abgesicherten Modus und Sie sehen möglicherweise andere Ergebnisse.

    
Bryan Migliorisi 26.01.2011 12:56
quelle
1

Sie werden die wahre Macht von Cassandra nutzen, sobald Sie mehrere Knoten laufen haben. Jeder Knoten kann eine Schreibanforderung annehmen. Das Multithreading eines Clients überflutet nur mehr Anfragen an dieselbe Instanz, was nach einem Punkt nicht hilft.

  • Überprüfen Sie das cassandra-Protokoll auf die Ereignisse, die während Ihrer Tests auftreten. Cassandra wird einen Plattenschreibvorgang initiieren, sobald der Memtable voll ist (dies ist konfigurierbar, machen Sie es groß genug und Sie werden im RAM + Festplattenschreibvorgänge des Commit-Protokolls behandeln). Wenn während des Tests ein Disk-Schreibvorgang für MEMTABLE stattfindet, wird der Vorgang verlangsamt. Ich weiß nicht, wann MongoDB auf Festplatte schreibt.
Ravindra 27.01.2011 09:56
quelle
1

Darf ich vorschlagen, einen Blick auf Membase zu werfen? Es wird genau wie Memcached verwendet und ist vollständig verteilt, so dass Sie Ihre Schreibeingangsrate kontinuierlich skalieren können, indem Sie einfach weitere Server und / oder mehr RAM hinzufügen.

In diesem Fall werden Sie auf jeden Fall mit einem Client-Moxi arbeiten wollen, um die beste Leistung zu erzielen. Werfen Sie einen Blick auf unser Wiki: wiki.membase.org für Beispiele und lassen Sie mich wissen, wenn Sie weitere Anweisungen benötigen ... Ich bin glücklich, Sie durch es zu führen, und ich bin sicher, dass Membase diese Belastung leicht bewältigen kann / p>     

Perry Krug 28.01.2011 18:25
quelle
1
  

Erstellen Sie einen Batch-Mutator für diese Aufgabe   mehrere einfügen, aktualisieren und entfernen   Operationen mit so wenig Runden wie   möglich.

Ссылка

Batch-Mutator hat mir geholfen, die Einfügezeit in mindestens der Hälfte zu reduzieren

    
warvariuc 17.03.2011 21:08
quelle

Tags und Links