Ich versuche letzten aktiven Sensoren dieses Schema zu speichern und abzurufen:Wie ich in Bereichsabfragen weiß, ruft Cassandra das Ergebnis nach dem Culstring-Schlüssel ab. Kann ich dieses Verhalten in meiner Abfrage ändern?
CREATE TABLE last_signals (
section bigint,
sensor bigint,
time bigint,
PRIMARY KEY (section, sensor)
);
Zeile dieser Tabelle wird alle paar Sekunden aktualisiert werden und in der Folge heißen Sensoren werden in memtable
bleiben. Aber was passiert, wenn ich einen Laufe eine Abfrage wie folgt erhalten:
SELECT * FROM last_signals
WHERE section = ? AND time > ?
Limit ?
ALLOW FILTERING;
Und das Ergebnis wird in etwa so (durch Clustering-Schlüssel bestellt) sein:
sect | sens | time
------+------+------
1 | 1 | 4
1 | 2 | 3
1 | 4 | 2
1 | 5 | 9
Die erste Frage: Ist das Ergebnis garantiert in allen Versionen gleich zu sein? (Ich verwende 3,7) und der nächste ist, wie ich dieses Verhalten ändern kann (mit Abfrage-Option, Modellierung oder etc.). Tatsächlich muss ich die letzten Schreibvorgänge zuerst ohne Berücksichtigung der Befehlstastenreihenfolge durchführen. Ich denke in diesem Fall wird mein Lesen viel schneller sein.
Cassandra ist nicht sehr gut an Updates, die jeweils Update Blätter ein Tombstone bis zur nächsten Komprimierung, und wenn es viele von ihnen gibt, kann die Leseleistung beeinträchtigt sein, da sie sie durchforsten muss. Sie werden wahrscheinlich eine Änderung des Schemas in Betracht ziehen müssen, aber zuerst können Sie sagen, wie viele Abschnitte und Sensoren Sie maximal haben werden? – yurgis
@yurgis Ja, du hast Recht, aber ich habe darüber nachgedacht und werde die Layered-Komprimierung als Speicher-Engine verwenden. Außerdem konfiguriere ich meine Memtable-Größe, um alle heißen Sensoren in memtable zu behalten, und dann haben Updates keine großen Kosten für die Komprimierung. Ich werde Hunderte Sensoren pro Sektion und Millionen von Sektionen haben; aber ich habe ungefähr zehn heiße Sensoren pro Abschnitt, die in jeder Minute aktualisiert werden müssen. –