Auf einem physischen Knoten werden Zeilen für einen bestimmten Partitionsschlüssel in der Reihenfolge gespeichert, die durch die Clustering-Schlüssel induziert wird, wodurch das Abrufen von Zeilen in dieser Clustering-Reihenfolge besonders effizient ist. http://cassandra.apache.org/doc/cql3/CQL.html#createTableStmt Welche Art von Bestellung wird durch Clustering-Schlüssel ausgelöst?Clustering Keys in Cassandra
Antwort
Ihre Clustering Schlüssel sind
Angenommenk1 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
.
Danke Richard. Könnten Sie bitte ein Beispiel geben? – Vinodh
Ich habe meiner Antwort ein Beispiel hinzugefügt. – Richard
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