Ich versuche zu verstehen, wie eine vollständige Palette Abfragen mit Cassandra durchzuführen und um einige Unsicherheit in Bezug auf Token-Nutzung basierend auf Artikel this zu klären.Cassandra - WHERE Klausel Bereich/Token Klerifizierungen
Lassen Sie uns sagen, dass ich in der folgenden Tabelle haben:
CREATE TABLE space.rocket (
id timeuuid,
group text,
priority smallint,
date text, // Will hold YYYY-MM-DD
PRIMARY KEY ((group , date) , priority, id));
Was ist die beste Option, um einen Bereich zu haben, wo Klausel?
Zum Beispiel:
Kann ich eine Reihe von Gruppen, Datum und Priorität, wie dies auszuführen:
SELECT * FROM space.rocket
WHERE token(group, date) => token('group-name', '2017-17-09')
AND token(group, date) < token('group-name', '2017-17-10')
AND priority >= (0) AND priority <= (10) # or priority IN (0,1,2...10)
Oder sollte ich ein Token verwenden, wie folgt aus:
SELECT * FROM space.rocket
WHERE token(group, date, priority) => token('group-name', '2017-17-09', 0)
AND token(group, date, priority) < token('group-name', '2017-17-10', 11)
Und wie wäre es mit einer Abfrage, die auch einen Bereich auf sekundären Index (ID), wie folgt enthält:
SELECT * FROM space.rocket
WHERE token(group, date, priority, id) => token('group-name', '2017-17-09', 0, timeuuidStart)
AND token(group, date, priority, id) < token('group-name', '2017-17-10', 11, timeuuidFinish)
Oder, wie nach einer Liste von Gruppen und einem Bereich von Daten abfragen?
Bitte raten, Dank!
Wenn ich ** NOT ** mit ByteOrderedPartitioner bin, was sind die Folgen? Die Abfrage wird korrekt korrekte Ergebnisse (von wo Bedingungen) nur mit falscher Reihenfolge zurückgeben? oder wird es Auswirkungen auf die Leistung haben? Bitte beraten, Danke! – eldad87
Wenn Sie ByteOrderedPartitioner nicht verwenden, bedeutet Ihre Abfrage weniger, Sie erhalten keine Daten zwischen 2017-17-09 und 2017-17-10. Da ein Token eines Datums außerhalb des Datumsbereichs möglicherweise innerhalb des Bereichstokens des Datums liegt und umgekehrt. –