2016-04-20 19 views
0

Ich habe einen Tisch Mitarbeiter in cassandra.Cassandra Auftrag von mehreren Spalten

CREATE TABLE employee (
    emp_id  text, 
    joining_date TIMESTAMP, 
    salary  double, 
    first_name text, 
    dept   text, 
    last_name TIMESTAMP, 
    PRIMARY KEY (dept,emp_id)); 

Ich brauche Fähigkeit, meine cql Abfrageergebnisse basierend auf verschiedenen Spalten zu sortieren. ich brauche Unterstützung für alle unten erwähnten Anfragen. Gibt es eine Möglichkeit, dass wir dies in nativen cassandra erreichen können.

select * from employee order by emp_id; 
select * from employee order by joining_date; 
select * from employee order by salary; 
select * from employee order by first_name; 
etc., 

Antwort

0

Es ist nicht möglich.

Die einzige Sortierung, die Sie haben können, ist Clustering Spalte und in Ihrem Beispiel ist es emp_id.

2

Sie haben nicht in Select-Anweisungen bestellen. Sie können nur eine Bestellung in Ihrer create-Anweisung festlegen. Der Grund dafür ist einfach: Bestellung ist ein Performance-Killer. Cassandras Fokus ist das Schreiben von Daten. Das bedeutet: Cassandra hat eine wirklich gute Leistung beim Schreiben von Daten in Ihre definierte Reihenfolge. Cassandras Reihenfolge basiert auf dem Primärschlüssel. Der erste Teil des Primärschlüssels ist der Partitionsschlüssel. Der richtige Partition Key ist wirklich wichtig! Alle Zeilen mit demselben Partitionsschlüssel befinden sich auf demselben Computer. Das bedeutet: Das Filtern von Zeilen mit demselben Partitionsschlüssel ist eine Operation mit einer guten Leistung. Das Filtern von Zeilen ohne die gleiche Partition ist sehr langsam. Sie können jedoch nicht nur einen oder zwei Partitionsschlüssel verwenden. Wenn Sie dies tun, nutzen Sie nicht die Vorteile von Cassandra. Die anderen Teile Ihres Primärschlüssels sind die Spaltenschlüssel. Cassandra sortiert Ihre Daten in der Reihenfolge der Primärschlüssel. In Ihrem Beispiel wird cassandra nur nach emp_id sortieren. Wenn Sie mehr als eine Bestellung benötigen, erstellen Sie eine neue Spaltenfamilie (Tabelle). In Ihrem Fall können Sie diese Tabellen erstellen:

employeeByDeptDate (PRIMARY KEY (dept, joining_date))

employeeByDeptSalary (PRIMARY KEY (dept, Gehalt))

employeeByDeptFirstName (PRIMARY KEY (dept, first_name))

employeeByDeptEmp (PRIMARY KEY (dept, emp_id))

Jetzt werden Sie sagen: Was die .. Warum ich mehr als eine Tabelle erstellen haben. Cassandra ist eine denormalisierte Datenbank. Es ist kein Problem, Ihre Daten mehr als einmal zu speichern. HDD-Speicher sind billig. Cassandra 3.0 hat eine neue Funktion namens materialisierte Ansichten. Ein Ort, an dem Sie Ihre duplizierten Daten verwalten können.