Unterschied zwischen Partition Key, Composite Key und Clustering Key in Cassandra?

Ich habe Artikel im Netz gelesen, um die Unterschiede zwischen den folgenden "Schlüssel"-Typen zu verstehen. Aber es scheint mir einfach schwer zu fallen, sie zu verstehen. Beispiele werden auf jeden Fall helfen, das Verständnis zu verbessern.

primary key,
partition key, 
composite key 
clustering key
Lösung

Es gibt eine Menge Verwirrung in diesem Bereich, ich werde versuchen, es so einfach wie möglich zu machen.

Der Primärschlüssel ist ein allgemeines Konzept zur Bezeichnung einer oder mehrerer Spalten, die zum Abrufen von Daten aus einer Tabelle verwendet werden.

Der Primärschlüssel kann SIMPLE sein und sogar inline deklariert werden:

 create table stackoverflow_simple (
      key text PRIMARY KEY,
      data text      
  );

Das bedeutet, dass er aus einer einzigen Spalte besteht.

Der Primärschlüssel kann aber auch COMPOSITE (auch COMPOUND genannt) sein und aus mehreren Spalten gebildet werden.

 create table stackoverflow_composite (
      key_part_one text,
      key_part_two int,
      data text,
      PRIMARY KEY(key_part_one, key_part_two)      
  );

Bei einem COMPOSITE-Primärschlüssel wird der "erste Teil" des Schlüssels PARTITION KEY genannt (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)

Bitte beachten Sie, dass sowohl der Partitions- als auch der Clustering-Schlüssel aus mehreren Spalten bestehen können, und zwar wie folgt:

 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 Verteilung der Daten auf Ihre Knoten zuständig.
  • Der Clustering Key ist für die Sortierung der Daten innerhalb der Partition zuständig.
  • Der Primärschlüssel entspricht dem Partitionsschlüssel in einer Ein-Feld-Schlüssel-Tabelle (d.h. Einfach).
  • Der Composite/Compound Key ist einfach ein beliebiger mehrspaltiger Schlüssel

Weitere Informationen zur Verwendung: DATASTAX DOCUMENTATION


Kleine Verwendungs- und Inhaltsbeispiele
***EINFACH*** 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 (d.h. Sie können nur nach dem Partitionsschlüssel abfragen, auch 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

Aber Sie können 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 die Mindestangabe, die erforderlich ist, um eine Abfrage mit einer "Where-Klausel" durchzuführen. Wenn Sie einen zusammengesetzten Partitionsschlüssel haben, wie den folgenden

z.B.: PRIMARY KEY((col1, col2), col10, col4))

Sie können die Abfrage nur durchführen, wenn Sie mindestens die beiden Spalten col1 und col2 angeben, die den Partitionsschlüssel definieren. Die allgemeine Regel für die Abfrage ist, dass Sie mindestens alle Spalten des Partitionsschlüssels übergeben müssen, dann können Sie optional jeden Clustering-Schlüssel in der Reihenfolge hinzufügen, in der sie festgelegt sind.

Die gültigen Abfragen sind also (mit Ausnahme der sekundären Indizes)

  • col1 und col2
  • col1 und col2 und col10
  • Spalte 1 und Spalte 2 und Spalte 10 und Spalte 4

Ungültig:

  • col1 und col2 und col4
  • alles, was nicht sowohl col1 als auch col2 enthält

Ich hoffe, das hilft.

Kommentare (28)

Hinzufügen einer zusammenfassenden Antwort, da die akzeptierte Antwort ziemlich lang ist. Die Begriffe "Zeile" und "Spalte" werden im Kontext von CQL verwendet, nicht wie Cassandra tatsächlich implementiert ist.

  • Ein Primärschlüssel identifiziert eine Zeile eindeutig.
  • Ein Zusammengesetzter Schlüssel ist ein Schlüssel, der aus mehreren Spalten gebildet wird.
  • Ein Partitionsschlüssel ist der primäre Lookup, um einen Satz von Zeilen, d.h. eine Partition, zu finden.
  • Ein Clustering-Schlüssel ist der Teil des Primärschlüssels, der nicht der Partitionsschlüssel ist (und die Ordnung innerhalb einer Partition definiert).

Beispiele:

  • PRIMARY KEY (a): Der Partitionsschlüssel ista`.
  • PRIMARY KEY (a, b): Der Partitionsschlüssel ista, der Clustering-Schlüssel istb`.
  • PRIMARY KEY ((a, b)): Der zusammengesetzte Partitionsschlüssel ist(a, b)`.
  • PRIMARY KEY (a, b, c): Der Partitionsschlüssel ista, der zusammengesetzte Clustering-Schlüssel ist(b, c)`.
  • PRIMARY KEY ((a, b), c): Der zusammengesetzte Partitionsschlüssel ist(a, b), der Clustering-Schlüssel istc`.
  • PRIMARY KEY ((a, b), c, d): Der zusammengesetzte Partitionsschlüssel ist(a, b), der zusammengesetzte Clustering-Schlüssel ist(c, d)`.
Kommentare (0)

In Cassandra, der Unterschied zwischen Primärschlüssel, Partition Key, Composite Key, Clustering Key macht immer einige Verwirrung. Also werde ich im Folgenden erklären und miteinander in Beziehung setzen. Wir verwenden CQL (Cassandra Query Language) für den Zugriff auf Cassandra-Datenbanken. Hinweis:- Die Antwort entspricht der aktuellen Version von Cassandra. Primärschlüssel :- In Cassandra gibt es 2 verschiedene Möglichkeiten, Primärschlüssel zu verwenden.

CREATE TABLE Cass (
    id int PRIMARY KEY,
    name text 
);

Create Table Cass (
   id int,
   name text,
   PRIMARY KEY(id) 
);

In CQL ist die Reihenfolge, in der die Spalten für den PRIMARY KEY definiert werden, von Bedeutung. Die erste Spalte des Schlüssels wird Partitionsschlüssel genannt und hat die Eigenschaft, dass alle Zeilen, die denselben Partitionsschlüssel haben (sogar tabellenübergreifend), auf demselben physischen Knoten gespeichert werden. Außerdem wird das Einfügen/Aktualisieren/Löschen von Zeilen, die denselben Partitionsschlüssel für eine bestimmte Tabelle haben, atomar und isoliert durchgeführt. Beachten Sie, dass es möglich ist, einen zusammengesetzten Partitionsschlüssel zu haben, d. h. einen Partitionsschlüssel, der aus mehreren Spalten besteht, wobei ein zusätzlicher Satz von Klammern verwendet wird, um zu definieren, welche Spalten den Partitionsschlüssel bilden.

Partitionierung und Clustering Die PRIMARY KEY-Definition besteht aus zwei Teilen: dem Partitionsschlüssel und den Clustering-Spalten. Der erste Teil entspricht dem Zeilenschlüssel der Speichermaschine, während der zweite Teil zur Gruppierung der Spalten in einer Zeile verwendet wird.

CREATE TABLE device_check (
  device_id   int,
  checked_at  timestamp,
  is_power    boolean,
  is_locked   boolean,
  PRIMARY KEY (device_id, checked_at)
);

Hier ist device_id der Partitionsschlüssel und checked_at der Cluster_key.

Wir können mehrere Cluster-Schlüssel sowie Partitionsschlüssel haben, die von der Deklaration abhängen.

Kommentare (1)