Cassandra Performance für lange Zeilen

8

Ich versuche, eine CF in Cassandra zu implementieren, die sehr lange Zeilen hat (Hunderttausende bis Millionen von Spalten pro Zeile).

Unter Verwendung von Dummy-Daten habe ich 2 Millionen Spalten in eine einzelne Zeile (gleichmäßig verteilt) eingefügt. Wenn ich eine Slice-Operation mache, um 20 Spalten zu erhalten, merke ich eine massive Leistungsverschlechterung, während Sie die Slice-Operation weiter unten in der Zeile ausführen.

Bei den meisten Spalten scheint es mir möglich zu sein, Scheibenergebnisse in 10-40ms zu liefern, aber wenn Sie gegen Ende der Reihe kommen, schlägt die Leistung die Wand, und die Reaktionszeiten steigen von 43ms auf 1.800.000 Markiere auf 214ms bei 1.900.000 und 435ms bei 1.999.900! (Alle Scheiben sind gleich breit).

Ich kann nicht erklären, warum es zu dieser massiven Leistungsverschlechterung kommt, wenn Sie an das Ende der Reihe kommen. Kann jemand bitte eine Anleitung geben, was Cassandra intern macht, um so eine Verzögerung zu machen? Zeilencaching ist deaktiviert und so ziemlich alles ist eine Standardinstallation von Cassandra 1.0.

Es soll in der Lage sein, bis zu 2 Milliarden Spalten pro Zeile zu unterstützen, aber bei dieser Geschwindigkeitserhöhung bedeutet das, dass es in einer praktischen Situation nicht für sehr lange Reihen verwendet werden kann.

Vielen Dank.

Vorbehalt, ich schlage das mit 10 Anfragen gleichzeitig, weshalb sie etwas langsamer sind, als ich es ohnehin erwarte, aber es ist ein fairer Test für alle Anfragen und sie werden alle nur seriell ausgeführt ist diese seltsame Verschlechterung zwischen dem 1.800.000 und 1.900.000. Rekord.

Ich habe auch extrem schlechte Leistung bemerkt, wenn ich inverse Slices für nur einen einzigen Artikel mache, wenn ich nur 200.000 Spalten pro Zeile habe:   query.setRange (end, start, false, 1);

    
agentgonzo 16.03.2012, 17:06
quelle

2 Antworten

4

psanfords Kommentar führte mich zu der Antwort. Es stellt sich heraus, dass Cassandra & lt; 1.1.0 (gegenwärtig in der Beta) eine langsame Leistung in Slices in langen Reihen in Memtables hat (die nicht auf Platte geleert wurden), aber eine bessere Leistung auf SSTables mit denselben Daten auf die Platte brachte >

siehe Ссылка und Ссылка .

In meinem Beispiel wurden die ersten 1,8 Millionen Zeilen auf die Festplatte geleert, so dass die Schnitte über diesen Bereich schnell waren, aber die letzten ~ 200.000 Zeilen wurden nicht auf die Festplatte geleert und befanden sich noch in Memtables. Da das Memtable-Slicing bei langen Zeilen langsam ist, habe ich am Ende der Zeilen eine schlechte Leistung festgestellt (meine Daten wurden in Spaltenreihenfolge eingefügt).

Dies kann behoben werden, indem manuell ein Flush auf den Cassandra-Knoten aufgerufen wird. Ein Patch wurde auf 1.1.0 angewendet, um dies zu beheben, und ich kann bestätigen, dass dies das Problem für mich behebt.

Ich hoffe, das hilft anderen mit dem gleichen Problem.

    
agentgonzo 19.03.2012, 15:13
quelle
9

Eine gute Quelle dazu ist Aaron Mortons Blogpost zu Cassandras umgekehrten Komparatoren . Aus dem Artikel:

  

Erinnern Sie sich an meinen Beitrag zu Cassandra Query Plans , mit dem Zeilen einmal erreicht werden Bei einer bestimmten Größe enthalten sie einen Index der Spalten. Und dass der gesamte Index gelesen werden muss, wenn ein Teil des Indexes verwendet werden muss. Dies ist der Fall, wenn ein Slice-Bereich verwendet wird, der start oder reversed angibt. Die schnellste Slice-Abfrage, die für eine Zeile ausgeführt wurde, war eine, die die ersten X-Spalten in einer Zeile abruft, indem nur eine Spaltenanzahl angegeben wurde.

Wenn Sie hauptsächlich am Ende einer Zeile lesen (wenn Sie beispielsweise Dinge nach Zeitstempel speichern und Sie sich hauptsächlich aktuelle Daten ansehen möchten), können Sie Reversed Comparator verwenden, die Spalten in absteigender Reihenfolge speichert. Dadurch erhalten Sie viel bessere (und konsistentere) Abfrageleistung.

Wenn Ihre Lesemuster zufälliger sind, sollten Sie Ihre Daten besser über mehrere Zeilen verteilen.

    
psanford 16.03.2012 17:23
quelle

Tags und Links