alle

2017-08-17 1 views
0

Ich habe eine hohe Last von Daten (~ 50 mil pro Minute) holen Partition Schlüssel in cassandra dies ist, wie meine Tabelle wie folgt aussieht:alle

CREATE TABLE test.metric (
    key text, 
    timestamp bigint, 
    value double, 
    PRIMARY KEY (key, timestamp)) 

ich alle einzigartige key bekommen müssen. Ich kann natürlich SELECT DISTINCT key from metrics; tun, aber ich frage mich, ob es einen effizienteren Weg (neben dem Erstellen einer anderen Tabelle, die nur die Schlüssel enthält) zum Abrufen aller verschiedenen Partitionen Schlüssel (vielleicht aus einer Cassandra-Tabelle)

Antwort

1

Was Sie tun möchten, ist Setup eine Reihe von parallelen Jobs, dass jeder ausführen:

SELECT DISTINCT key FROM metrics WHERE token(key) >= ? AND token(key) < ?

Dann den Ring aufzuteilen (Sie verwenden wahrscheinlich Murmur3 Partitionierungs der Cassandra, so dass man von -2^63 bis 2^63 gehen werde) in so viele Abschnitte wie sinnvoll ist und diese Abfragen parallel absetzen. Sie können die Ausgabe von nodetool ring verwenden, um Ihnen ein paar Tipps zum Aufteilen der Jobs zu geben - die Aufteilung nach Hosts, sodass nur eine kleine Anzahl von SELECT-Abfragen pro Host am leistungsfähigsten ist.

+0

danke. das ist interessant. Kannst du es ausarbeiten? Ist das Erstellen mehrerer Abfragen möglicherweise mit doppelten Schlüsseln beendet? – igx

+1

Ich habe gerade über diese Technik gelesen! Sehen Sie hier für mehr Erklärung: http://www.scyllabb.com/2017/02/13/efficient-full-table-scans-with-scylla-1-6/ – LHWizard

Verwandte Themen