Différence entre la clé de partition, la clé composite et la clé de clustering dans Cassandra?

J'ai lu des articles sur le net pour comprendre les différences entre les key types. Mais il me semble juste difficile à saisir. Les exemples aideront certainement à mieux comprendre.

primary key,
partition key, 
composite key 
clustering key
401
demandé sur Rodrigo 2014-07-25 10:49:46

7 réponses

, Il y a beaucoup de confusion autour de cela, je vais essayer de le rendre aussi simple que possible.

La clé primaire est un concept général pour indiquer une ou plusieurs colonnes utilisées pour récupérer des données d'une Table.

La clé primaire peut être SIMPLE et même déclaré en ligne:

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

Cela signifie qu'il est fait par une seule colonne.

, Mais la clé primaire peut également être COMPOSITE (aka COMPOSÉ), généré à partir de plusieurs colonnes.

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

, Dans une situation de COMPOSITE clé primaire, la "première partie" de la clé est appelé CLÉ de PARTITION (dans cet exemple key_part_one est la clé de partition) et la deuxième partie de la clé est la CLÉ de cluster (dans cet exemple key_part_two)

Veuillez noter que la clé de partition et de clustering peut être faite par Plus de colonnes , Voici comment:

 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)      
  );

Derrière ces noms ...

  • La clé de Partition est responsable de la distribution des données entre vos nœuds.
  • La clé de Clustering {[19] } est responsable du tri des données dans la partition.
  • La clé primaire {[19] } est équivalente à la clé de Partition dans une table de clé à champ unique (c'est-à-dire Simple).
  • La clé Composite/Compound est n'importe quelle colonne multiple clé

Autres informations d'utilisation: DOCUMENTATION DATASTAX


Petits exemples d'utilisation et de contenu
SIMPLE clé:
insert into stackoverflow_simple (key, data) VALUES ('han', 'solo');
select * from stackoverflow_simple where key='han';

Contenu du tableau

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

composite / composé clé peut récupérer des "lignes larges" (c'est-à-dire que vous pouvez interroger uniquement la clé de partition, même si vous avez défini des clés de clustering)

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';

Contenu du tableau

 key_part_one | key_part_two | data
--------------+--------------+--------------------
      ronaldo |            9 |    football player
      ronaldo |           10 | ex-football player

Mais vous pouvez interroger avec toutes les clés (partition et clustering)...

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

Sortie de requête

 key_part_one | key_part_two | data
--------------+--------------+--------------------
      ronaldo |           10 | ex-football player

Remarque importante: la clé de partition est le spécificateur minimum nécessaire pour effectuer une requête à l'aide d'un where clause. Si vous avez une clé de partition composite, comme suit

Par exemple: PRIMARY KEY((col1, col2), col10, col4))

Vous ne pouvez effectuer une requête qu'en passant au moins col1 et col2, ce sont les 2 colonnes qui définissent la clé de partition. La règle "générale" pour faire la requête est que vous devez passer au moins tout colonnes de clé de partition, vous pouvez ensuite ajouter éventuellement chaque clé de clustering dans l'ordre dans lequel elles sont définies.

, Donc les requêtes valides sont (à l'exclusion des index secondaires)

  • col1 et col2
  • col1 et col2 et col10
  • col1 et col2 et col10 et col 4

Invalide:

  • col1 et col2 et col4
  • Tout ce qui ne contient pas à la fois col1 et col2

J'espère que cela aide.

931
répondu Carlo Bertuccini 2018-05-22 08:01:18

Ajouter une réponse redux car la réponse acceptée est assez longue. Les Termes " row " et "column" sont utilisés dans le contexte de CQL, pas comment Cassandra est réellement implémenté.

  • clé primaire identifie de manière unique une ligne.
  • une clé composite est une clé formée de plusieurs colonnes.
  • une clé de partition est la recherche principale pour trouver un ensemble de lignes, c'est-à-dire une partition.
  • Une clé de clustering est la partie de la clé primaire qui n'est pas la clé de partition (et définit les de la commande à l'intérieur d'une partition).

Exemples:

  • PRIMARY KEY (a): La clé de partition est a.
  • PRIMARY KEY (a, b): La clé de partition est a, la clé de cluster est b.
  • PRIMARY KEY ((a, b)): la clé de partition composite est (a, b).
  • PRIMARY KEY (a, b, c): La clé de partition est a, le composite clé de cluster est (b, c).
  • PRIMARY KEY ((a, b), c): Le composite clé de partition est (a, b), la clé de cluster est c.
  • PRIMARY KEY ((a, b), c, d): la clé de partition composite est (a, b), le composite la clé de clustering est (c, d).
84
répondu OrangeDog 2017-08-14 14:13:24

Dans cassandra , la différence entre la clé primaire, la clé de partition, la clé composite, la clé de clustering fait toujours une certaine confusion.. Donc, je vais expliquer ci-dessous et CO se rapportent les uns aux autres. Nous utilisons CQL (Cassandra Query Language) pour L'accès à la base de données Cassandra. Remarque: - la réponse est selon la version mise à jour de Cassandra. Clé Primaire :-

Dans cassandra, il existe 2 façons différentes d'utiliser la clé primaire .

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

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

Dans CQL, l'ordre dans lequel les colonnes sont définies pour les questions de clé primaire. La première colonne de la clé est appelée la clé de partition ayant la propriété que toutes les lignes partageant la même clé de partition (même à travers la table en fait) sont stockées sur le même nœud physique. De plus, l'insertion / mise à jour/suppression sur des lignes partageant la même clé de partition pour une table donnée est effectuée de manière atomique et isolée. Notez qu'il est possible d'avoir une clé de partition composite, c'est-à-dire une clé de partition formée de plusieurs colonnes, en utilisant un ensemble supplémentaire de parenthèses pour définissez les colonnes qui forment la clé de partition.

Partitionnement et regroupement La définition de clé primaire se compose de deux parties: la clé de Partition et les colonnes de Clustering. La première partie correspond à la clé de ligne du moteur de stockage, tandis que la seconde est utilisée pour regrouper des colonnes dans une rangée.

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

Ici device_id est la clé de partition et checked_at est cluster_key.

Nous pouvons avoir plusieurs clés de cluster ainsi que la clé de partition qui dépend de la déclaration.

12
répondu Big Data Guy 2016-05-15 08:51:40

Clé Primaire: Est composé de la clé de partition(s) [et facultatif clés de clusters(ou des colonnes)]
Clé de Partition: La valeur de hachage de la clé de Partition est utilisée pour déterminer le nœud dans un cluster pour stocker les données
Clé de cluster: Est utilisé pour trier les données dans chacune des partitions(ou responsable nœud et répliques)

Compound Primary Key : comme indiqué ci-dessus, les clés de clustering sont facultatives dans une clé primaire. Si elles ne sont pas mentionnées, c'est un clé primaire simple. Si les clés de clustering sont mentionnées, c'est une clé primaire composée.

Clé de Partition Composite : L'utilisation d'une seule colonne comme clé de partition peut entraîner des problèmes de ligne (dépend de la modélisation des cas d'Utilisation/données). Donc la clé de partition est parfois spécifié comme une combinaison de plus d'une colonne.

en ce qui concerne la confusion dont un est obligatoire, lequel peut être ignoré etc. dans une requête, en essayant de imaginez Cassandra comme un HashMap géant ça aide. Donc, dans un HashMap, vous ne pouvez pas récupérer les valeurs sans la clé.
ici, les clés de Partition jouent le rôle de cette clé. Donc, chaque requête doit les avoir spécifiées. Sans lequel Cassandra ne saura pas quel nœud rechercher.
Les clés de clustering (colonnes, qui sont facultatives) aident à réduire davantage votre recherche de requête après que Cassandra ait découvert le nœud spécifique (et ses répliques) responsable de ce nœud spécifique clé de Partition.

5
répondu dd9chndn 2018-03-29 11:05:50

En bref:

Clé de Partition n'est rien, mais identification pour une ligne, que l'identification, la plupart du temps est la seule colonne (appelée Clé Primaire) parfois, une combinaison de plusieurs colonnes (appelé Composite Clé de Partition).

La clé de Cluster n'est rien, mais Indexation & Tri. Les clés de Cluster dépendent de peu de choses:

  1. Quelles colonnes vous utilisez dans la clause where sauf primaire colonnes de clé.

  2. Si vous avez de très grands dossiers alors sur quelle préoccupation je peux diviser la date pour une gestion facile. Exemple, j'ai des données de 1 million d'enregistrements de population de comté. Donc, pour une gestion facile, je cluster les données en fonction de l'état et après pincode et ainsi de suite.

3
répondu Sun 2018-01-12 06:30:21

À noter, vous utiliserez probablement ces lots plus que dans des concepts similaires dans le monde relationnel (clés composites).

Exemple-supposons que vous deviez trouver les N derniers utilisateurs qui ont récemment rejoint le groupe D'utilisateurs X. Comment feriez-vous cela efficacement étant donné que les lectures prédominent dans ce cas? Comme ça (du guide officiel Cassandra):

CREATE TABLE group_join_dates (
    groupname text,
    joined timeuuid,
    join_date text,
    username text,
    email text,
    age int,
    PRIMARY KEY ((groupname, join_date), joined)
) WITH CLUSTERING ORDER BY (joined DESC)

Ici, la clé de partitionnement est elle-même composée et la clé de clustering est une date jointe. La raison pour laquelle un clustering key est une date de jointure est que les résultats sont déjà triés (et stockés, ce qui rend les recherches rapides). Mais pourquoi utilisons-nous une clé composée pour clé de partitionnement ? Parce que nous voulons toujours lire le moins de partitions possible . Comment mettre join_date là-dedans aide? Maintenant, les utilisateurs du même groupe et la même date de jointure résideront dans une seule partition! Cela signifie que nous lirons toujours aussi peu de partitions que possible (commencez par le plus récent, puis passez à l'ancien et ainsi de suite sur, plutôt que de sauter entre eux).

En fait, dans les cas extrêmes, vous devrez également utiliser le hachage d'un join_date plutôt qu'un join_date seul - de sorte que si vous interrogez pour les 3 derniers jours, ceux-ci partagent souvent le même hachage et sont donc disponibles à partir de la même partition!

0
répondu kboom 2018-03-24 16:50:56

Dans la conception de base de données, une clé composée est un ensemble de superkeys qui n'est pas minimal.

Une clé composite est un ensemble qui contient un composé clé et au moins un attribut qui n'est pas un superkey

Table donnée: employés {employee_id, prénom, nom de famille}

Les superkeys possibles sont:

{employee_id}
{employee_id, firstname}
{employee_id, firstname, surname}

{employee_id} est la seule superkey minimale, ce qui en fait également la seule clé candidate-étant donné que {firstname} et {NAME} ne garantissent pas l'unicité. Depuis une clé primaire est défini comme une clé candidate choisie, et une seule clé candidate existe dans cet exemple, {employee_id} est la superkey minimale, la seule clé candidate et la seule clé primaire possible.

La liste exhaustive des clés composées est:

{employee_id, firstname}
{employee_id, surname}
{employee_id, firstname, surname}

La seule clé composite est {employee_id, firstname, name} puisque cette clé contient une clé composée ({employee_id, firstname}) et un attribut qui n'est pas une superkey ({nom de famille}).

-2
répondu Khurana 2017-05-24 10:18:38