658 Stimmen

Unterschied zwischen Partitionsschlüssel, zusammengesetztem Schlüssel und Clustering-Schlüssel in Cassandra?

Ich habe Artikel im Netz gelesen, um die Unterschiede zwischen den folgenden Schlüssel-Typen zu verstehen. Aber es fällt mir schwer, es zu erfassen. Beispiele werden definitiv helfen, um es besser zu verstehen.

Primärschlüssel,
Partitionsschlüssel, 
Zusammengesetzter Schlüssel 
Clustering-Schlüssel

1428voto

Carlo Bertuccini Punkte 19434

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, um eine oder mehrere Spalten anzuzeigen, die verwendet werden, um Daten aus einer Tabelle abzurufen.

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 er aus einer einzigen Spalte besteht.

Aber der Primärschlüssel kann auch ZUSAMMENGESETZT (auch bekannt als VERBUNDEN) sein, der 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 eines ZUSAMMENGESETZTEN Primärschlüssels wird der "erste Teil" des Schlüssels als STUFENAUSSCHLÜSSEL bezeichnet (in diesem Beispiel ist key_part_one der Stufenausschlüssel) und der zweite Teil des Schlüssels ist der CLUSTER-SCHLÜSSEL (in diesem Beispiel key_part_two)

Bitte beachten Sie, dass sowohl der Stufenausschlüssel als auch der Cluster-Schlüssel aus mehreren Spalten bestehen können, hier ist wie:

 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 Bezeichnungen ...

  • Der Stufenausschlüssel ist für die Datenverteilung über Ihre Knoten verantwortlich.
  • Der Cluster-Schlüssel ist für die Sortierung der Daten innerhalb der Partition verantwortlich.
  • Der Primärschlüssel ist äquivalent zum Stufenausschlüssel in einer Einzelfeld-Schlüsseltabelle (d. h. Einfach).
  • Der Zusammengesetzte/Verbundene Schlüssel ist einfach ein beliebiger mehrspaltiger Schlüssel

Weitere Verwendungsinformationen: DATENSTAX-DOKUMENTATION


Kleine Verwendungs- und Inhaltsbeispiele
***EINFACHER*** SCHLÜSSEL:

insert into stackoverflow_simple (key, data) VALUES ('han', 'solo');
select * from stackoverflow_simple where key='han';

Tabelleninhalt

key | data
----+------
han | solo

ZUSAMMENGESCHLOSSENER/VERBUNDENER SCHLÜSSEL kann "breite Zeilen" abrufen (d. h. Sie können nur nach dem Stufenausschlüssel abfragen, auch wenn Cluster-Schlüssel definiert sind)

insert into stackoverflow_composite (key_part_one, key_part_two, data) VALUES ('ronaldo', 9, 'Fußballspieler');
insert into stackoverflow_composite (key_part_one, key_part_two, data) VALUES ('ronaldo', 10, 'Ex-Fußballspieler');
select * from stackoverflow_composite where key_part_one = 'ronaldo';

Tabelleninhalt

 key_part_one | key_part_two | data
--------------+--------------+--------------------
      ronaldo |            9 |    Fußballspieler
      ronaldo |           10 | Ex-Fußballspieler

Aber Sie können mit allen Schlüsseln (sowohl Stufen- als auch Cluster-) abfragen ...

select * from stackoverflow_composite 
   where key_part_one = 'ronaldo' and key_part_two  = 10;

Abfrageergebnis

 key_part_one | key_part_two | data
--------------+--------------+--------------------
      ronaldo |           10 | Ex-Fußballspieler

Wichtiger Hinweis: Der Stufenausschlüssel ist der Mindestbestandteil, der benötigt wird, um eine Abfrage mit einer where-Klausel durchzuführen. Wenn Sie einen zusammengesetzten Stufenausschlüssel haben, wie z.B. den folgenden

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

Sie können nur eine Abfrage durchführen, indem Sie mindestens sowohl col1 als auch col2 übergeben, dies sind die 2 Spalten, die den Stufenausschlüssel definieren. Die "allgemeine" Regel für die Abfrage besteht darin, dass Sie mindestens alle Stufenausschlüsselspalten übergeben müssen, dann können Sie optional jeden Cluster-Schlüssel in der Reihenfolge hinzufügen, in der sie festgelegt sind.

also sind die gültigen Abfragen (Ausschluss sekundärer Indizes)

  • 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

211voto

OrangeDog Punkte 33207

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

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

Beispiele:

  • PRIMARY KEY (a): Der Partitionsschlüssel ist a.
  • PRIMARY KEY (a, b): Der Partitionsschlüssel ist a, der Clustering-Schlüssel ist b.
  • PRIMARY KEY ((a, b)): Der zusammengesetzte Partitionsschlüssel ist (a, b).
  • PRIMARY KEY (a, b, c): Der Partitionsschlüssel ist a, der zusammengesetzte Clustering-Schlüssel ist (b, c).
  • PRIMARY KEY ((a, b), c): Der zusammengesetzte Partitionsschlüssel ist (a, b), der Clustering-Schlüssel ist c.
  • PRIMARY KEY ((a, b), c, d): Der zusammengesetzte Partitionsschlüssel ist (a, b), der zusammengesetzte Clustering-Schlüssel ist (c, d).

18voto

In Cassandra, the difference between primary key, partition key, composite key, clustering key always makes some confusion. So, I am going to explain below and co relate to each other's. We use CQL (Cassandra Query Language) for Cassandra database access. Note: - Answer is as per updated version of Cassandra.

Primärschlüssel: - In Cassandra gibt es 2 verschiedene Möglichkeiten, den 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 spielt die Reihenfolge, in der Spalten für den PRIMARY KEY definiert werden, eine Rolle. Die erste Spalte des Schlüssels wird als Partitionsschlüssel bezeichnet, der die Eigenschaft hat, dass alle Zeilen, die den gleichen Partitionsschlüssel teilen (sogar über Tabellen hinweg), auf demselben physischen Knoten gespeichert sind. Außerdem werden Einfüge-/Update-/Löschvorgänge auf Zeilen, die den gleichen Partitionsschlüssel für eine gegebene Tabelle teilen, 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, indem eine zusätzliche Klammer verwendet wird, um festzulegen, welche Spalten den Partitionsschlüssel bilden.

Partitionierung und Clustering Die Definition des PRIMARY KEY besteht aus zwei Teilen: dem Partitionsschlüssel und den Clustering-Spalten. Der erste Teil entspricht dem Speicher-Engine-Zeilen-Schlüssel, während der zweite dazu dient, Spalten in einer Zeile zu gruppieren.

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 ist der Clustering Key.

Wir können auch mehrere Clustering-Keys sowie Partitionsschlüssel haben, abhängig von der Deklaration.

12voto

Chandan Hegde Punkte 311

Primärschlüssel: Besteht aus Partitionschlüssel(n) [und optionalen Clustering-Schlüsseln (oder Spalten)]
Partitionschlüssel: Der Hashwert des Partitionschlüssels wird verwendet, um den spezifischen Knoten in einem Cluster zu bestimmen, um die Daten zu speichern

Clustering-Schlüssel: Wird verwendet, um die Daten in jeder der Partitionen (oder verantwortlichen Knoten und deren Repliken) zu sortieren

Zusammengesetzter Primärschlüssel: Wie oben erwähnt, sind die Clustering-Schlüssel optional in einem Primärschlüssel. Wenn sie nicht erwähnt werden, handelt es sich um einen einfachen Primärschlüssel. Wenn Clustering-Schlüssel erwähnt werden, handelt es sich um einen zusammengesetzten Primärschlüssel.

Zusammengesetzter Partitionschlüssel: Die Verwendung nur einer Spalte als Partitionschlüssel kann zu weiten Zeilenproblemen führen (abhängig vom Anwendungsfall/Datenmodellierung). Daher wird der Partitionschlüssel manchmal als Kombination von mehr als einer Spalte angegeben.

In Bezug auf die Verwirrung darüber, welche davon obligatorisch ist, welche übersprungen werden kann usw. in einer Abfrage hilft es, sich Cassandra als riesige HashMap vorzustellen. In einer HashMap können Sie die Werte nicht ohne den Schlüssel abrufen.

Hier spielen die Partitionschlüssel die Rolle dieses Schlüssels. Daher müssen sie in jeder Abfrage angegeben werden. Ohne diese würde Cassandra nicht wissen, nach welchem Knoten gesucht werden soll.

Die Clustering-Schlüssel (Spalten, die optional sind) helfen dabei, die Abfragesuche weiter einzugrenzen, nachdem Cassandra den spezifischen Knoten (und dessen Repliken) gefunden hat, der für diesen spezifischen Partitionschlüssel verantwortlich ist.

7voto

Sun Punkte 3128

In kurzer Hinsicht:

Partition Key ist nichts anderes als die Identifizierung für eine Zeile, diese Identifizierung ist meistens die einzelne Spalte (genannt Primärschlüssel) manchmal eine Kombination aus mehreren Spalten (genannt Zusammengesetzter Partitionsschlüssel).

Cluster-Schlüssel ist nichts anderes als Indexierung & Sortierung. Cluster-Schlüssel hängen von wenigen Dingen ab:

  1. Welche Spalten Sie im WHERE-Teil verwenden, außer den Primärschlüsselspalten.

  2. Wenn Sie sehr große Datensätze haben, worauf ich die Daten für eine einfache Verwaltung aufteilen kann. Beispiel: Ich habe Daten von einer Million Einwohneraufzeichnungen eines Landkreises. Also gliedere ich die Daten zur einfachen Verwaltung nach Bundesstaat und dann nach Postleitzahl und so weiter.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X