CREATE TABLE example (a int, b int, c int, d int, PRIMARY KEY (a,b,c)) WITH CLUSTERING ORDER BY (b DESC , c ASC) ;
Ist die richtige Syntax mit mehreren Spalten für die Bestellung.
für Ihre Anwendung Sie versuchen, tatsächlich Ergebnisse deutlich unterschiedliche Arten von Anfragen zu erhalten. In Cassandra ist es am besten, jede Tabelle als Antwort auf eine bestimmte Abfrage zu gestalten.
Zum Beispiel (nicht so viel zu wissen über Ihre Anwendung)
select * from demo where oid = 100 and cid = 100 and ts > minTimeuuid('something');
select * from demo where oid = 100 and cid = 10;
Könnte besser wie
durch eine Tabellenstruktur bedient werden
create table demo_oct(oid int,cid int,ts timeuuid, body, other ...., PRIMARY KEY ((oid,cid),ts)) WITH CLUSTERING ORDER BY (ts DESC);
diese Weise wird jeder Satz von Zeitreihen für ein Paar oid- und cid-Daten befinden sich in ihrer eigenen Partition und sind leicht zu finden. Das liegt daran, dass ich einen Paritätsschlüssel verwende, der aus oid und cid besteht. Aus diesem Grund gibt es im Schlüssel zusätzliche Klammern. Der Clusterschlüssel ts stellt sicher, dass die Daten in der von Ihnen gewünschten Reihenfolge sind.
Aber wie Sie bemerkt haben, können Sie nicht select * from Tabelle oid == 10 auf dieser Tabelle durchführen, da das Scannen über die gesamte Datenbank (wegen der Partitionsstruktur)
Für die Anfragen wie
erfordern würde
Wählen Sie * aus der Demo, wobei oid = 100;
Sie brauchen eine zweite Tabelle (wieder nicht Ihre Anwendung zu wissen)
create table demo_ot(oid int,cid int,ts timeuuid, body, other ...., PRIMARY KEY (oid,ts)) WITH CLUSTERING ORDER BY (ts DESC);
Diese Tabelle Zeitreihen in einem einzigen partiton für jede OID für extrem schnelle Scheiben erlauben würde halten. Hier ist der Partitionsschlüssel nur OID, während ts immer noch der Clusterschlüssel ist.
Auf der Anwendungsseite würden Sie beide Tabellen gleichzeitig einfügen.
More info on Datamodeling
-Code nur Antworten sind selten, wenn überhaupt, sollten Sie gut, Qualität Antworten.Bitte versuchen Sie näher zu erläutern, warum * das eine akzeptable Antwort ist, indem Sie eine Erklärung und/oder relevante Links geben. – codeMagic
@RussS diese wunderbare Erklärung. Im Grunde verschwenden wir Speicher für Abfrageleistung und Flexibilität, oder? – Shrikar
Die Faustregeln in Cassandra sind, dass Schreibarbeiten billig sind. Also opfere Speicherplatz und formiere deine Daten wie deine Anfragen :) – RussS