Es gibt viel Verwirrung darüber, ich werde versuchen, es so einfach wie möglich zu machen.
Der Primärschlüssel ist ein allgemeines Konzept zur Angabe einer oder mehrerer Spalten, die zum Abrufen von Daten aus einer Tabelle verwendet werden.
Der Primärschlüssel kann EINFACH sein und sogar inline deklariert werden:
create table stackoverflow_simple (
key text PRIMARY KEY,
data text
);
Das bedeutet, dass es aus einer einzelnen Spalte besteht.
Der Primärschlüssel kann aber auch COMPOSITE (auch bekannt als COMPOUND ) sein, das aus mehreren Spalten generiert wird.
create table stackoverflow_composite (
key_part_one text,
key_part_two int,
data text,
PRIMARY KEY(key_part_one, key_part_two)
);
In einer Situation des COMPOSITE- Primärschlüssels heißt der "erste Teil" des Schlüssels PARTITION KEY (in diesem Beispiel ist key_part_one der Partitionsschlüssel) und der zweite Teil des Schlüssels ist der CLUSTERING KEY (in diesem Beispiel key_part_two ).
Beachten Sie, dass sowohl der Partitions- als auch der Clustering-Schlüssel aus mehreren Spalten bestehen können.
create table stackoverflow_multiple (
k_part_one text,
k_part_two int,
k_clust_one text,
k_clust_two int,
k_clust_three uuid,
data text,
PRIMARY KEY((k_part_one, k_part_two), k_clust_one, k_clust_two, k_clust_three)
);
Hinter diesen Namen ...
- Der Partitionsschlüssel ist für die Datenverteilung auf Ihre Knoten verantwortlich.
- Der Clustering-Schlüssel ist für die Datensortierung innerhalb der Partition verantwortlich.
- Der Primärschlüssel entspricht dem Partitionsschlüssel in einer Einzelfeldschlüsseltabelle (dh einfach ).
- Der zusammengesetzte / zusammengesetzte Schlüssel ist nur ein beliebiger mehrspaltiger Schlüssel
Weitere Verwendungsinformationen: DATASTAX-DOKUMENTATION
Beispiele für kleine Verwendung und Inhalte
EINFACHER SCHLÜSSEL:
insert into stackoverflow_simple (key, data) VALUES ('han', 'solo');
select * from stackoverflow_simple where key='han';
Tabelleninhalt
key | data
----+------
han | solo
COMPOSITE / COMPOUND KEY kann "breite Zeilen" abrufen (dh Sie können nur nach dem Partitionsschlüssel abfragen, selbst wenn Sie Clustering-Schlüssel definiert haben).
insert into stackoverflow_composite (key_part_one, key_part_two, data) VALUES ('ronaldo', 9, 'football player');
insert into stackoverflow_composite (key_part_one, key_part_two, data) VALUES ('ronaldo', 10, 'ex-football player');
select * from stackoverflow_composite where key_part_one = 'ronaldo';
Tabelleninhalt
key_part_one | key_part_two | data
--------------+--------------+--------------------
ronaldo | 9 | football player
ronaldo | 10 | ex-football player
Sie können jedoch mit allen Schlüsseln (sowohl Partition als auch Clustering) abfragen ...
select * from stackoverflow_composite
where key_part_one = 'ronaldo' and key_part_two = 10;
Abfrageausgabe
key_part_one | key_part_two | data
--------------+--------------+--------------------
ronaldo | 10 | ex-football player
Wichtiger Hinweis: Der Partitionsschlüssel ist der Mindestspezifizierer, der zum Ausführen einer Abfrage mit a erforderlich ist where clause
. Wenn Sie einen zusammengesetzten Partitionsschlüssel haben, wie folgt
z.B: PRIMARY KEY((col1, col2), col10, col4))
Sie können eine Abfrage nur durchführen, indem Sie mindestens col1 und col2 übergeben. Dies sind die beiden Spalten, die den Partitionsschlüssel definieren. Die "allgemeine" Regel für die Abfrage lautet, dass Sie mindestens alle Partitionsschlüsselspalten übergeben müssen. Anschließend können Sie optional jeden Clusterschlüssel in der angegebenen Reihenfolge hinzufügen.
Die gültigen Abfragen sind also ( ohne Sekundärindizes ).
- col1 und col2
- col1 und col2 und col10
- col1 und col2 und col10 und col 4
Ungültig:
- col1 und col2 und col4
- alles, was nicht sowohl col1 als auch col2 enthält
Hoffe das hilft.