2016-11-17 2 views
0

Ich kämpfe mit Datenreihenfolge von Cassandra Daten. Ich habe eine Tabelle wie dieseCassandra Datenreihenfolge ohne zu übergeben, wo Bedingung

tbl_data 
- yymmddhh (text) 
- data (text) 

Trennschlüssel ist 'yymmddhh'

Ich füge Daten wie diese

'16-11-17-01', 'a' 
'16-11-17-01', 'b' 
'16-11-17-02', 'c' 
'16-11-17-03', 'xyz' 
'16-11-17-03', 'e' 
'16-11-17-03', 'f' 

select * from tbl_data Grenze 10;

Ich erwarte Daten in der Reihenfolge, in der ich Daten hinzugefügt habe. Aber es gibt Daten wie diese

'16-11-17-03', 'f' 
'16-11-17-03', 'e' 
'16-11-17-01', 'a' 

d. H. Neuesten Datensatz zuerst oder einige zufällige Reihenfolge. Ich brauche Daten in der gleichen Reihenfolge, in der ich hinzugefügt habe. Ich bin nicht in der Lage, die Standardreihenfolge der Daten in meinem Fall herauszufinden. Außerdem möchte ich nicht den Partitionsschlüssel in der Bedingung übergeben, weil sein Overhead sich an diesen Wert für mich erinnert. Bitte schlage mir die Lösung vor.

+0

In Cassandra können Sie Bestelldaten nicht nach dem Partitionsschlüssel oder der Reihenfolge, in der Sie Daten hinzugefügt haben, erwarten. Cassandra Bestelldaten durch Clustering Spalte –

+0

Cassandra wird nicht für Ihren Anwendungsfall arbeiten. Sie MÜSSEN nach einem Partitionsschlüssel filtern, um jede sinnvolle Sortierreihenfolge in Ihrer Ergebnismenge zu erzwingen. Vollständige Erklärung finden Sie hier: http: // www.datastax.com/dev/blog/we-shall-have-order – Aaron

Antwort

4

Ich fürchte, du wirst für immer dafür kämpfen.

Laut Kommentare können Sie nicht die Reihenfolge "außerhalb" einer Partition entscheiden, es sei denn, Sie verstehen wirklich, was Sie tun, indem Sie die partitioner ändern.

Bitte haben Sie einen Lese am suggested Link, und bei this und this SO Antworten zu verstehen, warum Sie Ihre Datensätze in dieser bestimmten Reihenfolge bekommen (ja, sie sind bestellt ...).

Eine mögliche Lösung ist jedoch einen timestamp Clustering-Schlüssel hinzuzufügen, und die zu einem einfacheren „yymmdd“ Partitionsschlüssel zu ändern:

tbl_data 
- yymmdd (timestamp) 
- hhmmssMMM (timestamp) 
- data (text) 

Jetzt würden Sie die Daten von Tag zu Tag Grundlage speichern (das Sie müssen wissen der Tag, an dem Sie Daten abfragen für), und die Reihenfolge Ihrer Daten innerhalb jeder Partition (das ist jeden Tag) wird von der Spalte timestamp sortiert, so für Ihre Anforderungen würden Sie dort die Insertion speichern Zeit des Datensatzes.

Nun, wenn Sie nicht jeden Tag Daten einfügen, müssen Sie wirklich halten die Einführungsdaten in eine andere (sehr einfach) Tabelle verfolgen:

CREATE TABLE inserted_days (
    yymmdd timestamp PRIMARY KEY 
); 

eine Ausgabe

SELECT * FROM inserted_days 

würde scannen Sie diese ganze Partition und geben Sie die Datensätze in zufälliger Reihenfolge zurück (aus der Sicht Ihrer App, also müssen Sie sie sortieren), aber hier sprechen wir von 365 Datensätzen pro Jahr, etwas, um das Sie sich keine Sorgen machen müssen. Es ist einfach zu tun, und Sie würden keine unübersichtlichen Gemeinkosten haben.

HTH.

Verwandte Themen