2016-06-17 10 views
0

Ich habe eine Cassandra Tabelle wie folgt:Wie auf Cassandra mehr Abfragen in einer einzigen Charge auszuführen

create table experience.userstats (stream varchar, user varchar, computer varchar, experience varchar, amount int, primary key (experience, stream, user, computer);

ich Apache Sturm Schrauben verwenden diese Aufzeichnungen in Cassandra aus einer Warteschlange Auslauf zu erstellen.

Ich möchte aggregierte Statistiken generieren und den Zähler für verschiedene Erfahrungen für einen bestimmten Stream als Kreisdiagramm anzeigen. Zum Beispiel, 30% zufrieden, 40% gemischt und 30% unzufriedene Erfahrung.

Da ich Zähler online nicht aktualisieren kann, verwende ich einen Clock-Auslauf (Timer), um diese Daten zu lesen und Zähler in einer neuen Tabelle zu generieren. Aber Cassandra unterstützt keine Gruppenklauseln und daher muss ich dreimal lesen, um den Zähler für jede Erfahrung wie folgt zu erhalten.

select count(*) from experience.userstats where experience='satisfied' and stream='xyz'; 

select count(*) from experience.userstats where experience='unsatisfied' and stream='xyz'; 

select count(*) from experience.userstats where experience='mixed' and stream='xyz'; 

Das Problem bei diesem Ansatz ist, dass ich drei Abfragen auf Datenbank auszuführen haben die Zähler für die drei Arten von Erfahrungen und Erfahrungen zu sammeln konnte in der mittleren Zeit modifiziert werden diese Zähler im Widerspruch zu machen.

Gibt es eine Möglichkeit, oben drei Select-Anweisungen in einem einzigen Batch auszuführen? Oder könnten Sie bitte einen alternativen Designansatz vorschlagen?

+0

http://docs.datastax.com/de/cql/3.1/cql/cql_reference/batch_r.html –

+0

Es unterstützt nur dml nein? – pavybez

Antwort

0

Sie

IN

Beziehung Betreiber wie diese verwenden können,

SELECT COUNT (*) FROM Kundenstatistik WHERE Erfahrung IN ('gemischt', 'unzufrieden',‘ zufrieden) UND stream = 'xyz';

+0

Das würde für alle Erfahrungen zählen. Ich muss für jede Erfahrung zählen. – pavybez

0

Durch die Ausführung von count (*) erhalten Sie Zeitüberschreitungen. Warum verwenden Sie kein Zählerfeld und erhöhen es nur beim Einfügen? Auf diese Weise werden Sie nur nach einem Wert suchen. Verteilte Zähler sind in 2.1 und später verbessert und sie funktionieren gut.

+0

Danke für den Tipp. Ich werde count (*) vermeiden, aber ich brauche Zähler von Erfahrung, so müssen möglicherweise neue Tabellen erstellen, um diesen Zähler zu verwalten. – pavybez

Verwandte Themen