2013-09-05 20 views

Antwort

34

Ihre Clustering Schlüssel sind

Angenommen
k1 t1, k2 t2, ..., kn tn 

wo ki der i-te Schlüsselname ist und ti die i-te Schlüsseltyp. Dann werden die Auftragsdaten in einer lexikografischen Reihenfolge gespeichert, wobei jede Dimension unter Verwendung des Komparators für diesen Typ verglichen wird.

So (a1, a2, ..., an) < (b1, b2, ..., bn), wenn b1 a1 < Verwendung t1 Komparator bzw. a1 = b1 und a2 b2 < Verwendung t2 Komparator oder (a1 = b1 und a2 = b2) und a3 < b3 mit t3 Komparator, etc ..

Dies bedeutet, dass es effizient ist, alle Zeilen mit einem bestimmten k1 = a zu finden, da die Daten zusammen gespeichert werden. Es ist jedoch ineffizient, alle Zeilen mit ki = x für i> 1 zu finden. Tatsächlich ist eine solche Abfrage nicht zulässig. Die einzigen zulässigen Clustering-Schlüsseleinschränkungen geben null oder mehr Clustering-Schlüssel an, beginnend mit dem ersten ohne fehlende .

Betrachten wir zum Beispiel das Schema

create table clustering (
    x text, 
    k1 text, 
    k2 int, 
    k3 timestamp, 
    y text, 
    primary key (x, k1, k2, k3) 
); 

Wenn Sie die folgenden Einsätze haben:

insert into clustering (x, k1, k2, k3, y) values ('x', 'a', 1, '2013-09-10 14:00+0000', '1'); 
insert into clustering (x, k1, k2, k3, y) values ('x', 'b', 1, '2013-09-10 13:00+0000', '1'); 
insert into clustering (x, k1, k2, k3, y) values ('x', 'a', 2, '2013-09-10 13:00+0000', '1'); 
insert into clustering (x, k1, k2, k3, y) values ('x', 'b', 1, '2013-09-10 14:00+0000', '1'); 

dann sind sie in dieser Reihenfolge auf der Festplatte (die Reihenfolge select * from clustering where x = 'x' Returns) gespeichert:

x | k1 | k2 | k3      | y 
---+----+----+--------------------------+--- 
x | a | 1 | 2013-09-10 14:00:00+0000 | 1 
x | a | 2 | 2013-09-10 13:00:00+0000 | 1 
x | b | 1 | 2013-09-10 13:00:00+0000 | 1 
x | b | 1 | 2013-09-10 14:00:00+0000 | 1 

k1 Reihenfolge dominiert, dann k2, dann k3.

+0

Danke Richard. Könnten Sie bitte ein Beispiel geben? – Vinodh

+2

Ich habe meiner Antwort ein Beispiel hinzugefügt. – Richard

+1

Vielen Dank Richard. Aus Ihrem Beispiel kann ich Cluster-Spalten und die CQL-Dokumentation "die Reihenfolge, in der Spalten für die PRIMARY KEY-Angelegenheiten definiert sind" verstehen. von http://cassandra.apache.org/doc/cql3/CQL.html#createTableStmt. – Vinodh