web-dev-qa-db-fra.com

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

Je lisais des articles sur le net pour comprendre les différences entre les types key suivants. Mais cela me semble difficile à comprendre. Les exemples aideront certainement à améliorer la compréhension.

primary key,
partition key, 
composite key 
clustering key
470
brain storm

L'ajout d'une réponse sommaire comme réponse acceptée est assez long. Les termes "ligne" et "colonne" sont utilisés dans le contexte de CQL, et non pas comment Cassandra est réellement implémenté.

  • A clé primaire identifie de manière unique une ligne.
  • A clé composite est une clé formée de plusieurs colonnes.
  • Un clé de partition est la recherche principale pour trouver un ensemble de lignes, c'est-à-dire une partition.
  • Un clé de clustering est la partie de la clé primaire qui n'est pas la clé de partition (et définit l'ordre dans 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 clustering 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, la clé de regroupement composite est (b, c).
  • PRIMARY KEY ((a, b), c): la clé de partition composite est (a, b), la clé de clustering est c.
  • PRIMARY KEY ((a, b), c, d): la clé de partition composite est (a, b), la clé de regroupement composite est (c, d).
102
OrangeDog

Dans cassandra, la différence entre clé primaire, clé de partition, clé composite, clé de regroupement crée toujours une certaine confusion. Je vais donc expliquer ci-dessous et établir un lien entre eux. Nous utilisons CQL (Cassandra Query Language) pour Cassandra accès à la base de données. Remarque: - La réponse est conforme à la version mise à jour de Cassandra. clé primaire: -

Dans cassandra _ il y a 2 façons différentes d'utiliser une 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 PRIMARY KEY est important. La première colonne de la clé s'appelle la clé de partition. Elle a pour propriété que toutes les lignes partageant la même clé de partition (même d'une table à l'autre) sont stockées sur le même nœud physique. De plus, les insertions/mises à jour/suppressions sur les lignes partageant la même clé de partition pour une table donnée sont effectuées 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 jeu supplémentaire de parenthèses pour définir les colonnes constituant la clé de partition.

Partitionnement et mise en cluster La définition de PRIMARY KEY est composée de deux parties: la clé de partition et les colonnes de mise en cluster. La première partie est mappée sur la clé de ligne du moteur de stockage, tandis que la seconde est utilisée pour regrouper des colonnes dans une ligne.

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

Ici, id_périphérique est la clé de la partition et check_at est la clé de cluster.

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

14
Big Data Guy

clé primaire: est composé d'une ou plusieurs clés de partition [et de clés de clustering (ou de colonnes) facultatives]
Clé de partition: La valeur de hachage de Clé de partition est utilisée pour déterminer le nœud spécifique dans un cluster pour stocker les données
Clustering Key: Est utilisé pour trier les données dans chacune des partitions (ou le nœud responsable et ses répliques)

Clé primaire composée: Comme indiqué ci-dessus, les clés de clustering sont facultatives dans une clé primaire. S'ils ne sont pas mentionnés, c'est une clé primaire simple. Si des clés de clustering sont mentionnées, il s'agit d'une clé primaire composée.

Clé de partition composite: L'utilisation d'une seule colonne en tant que clé de partition peut entraîner problèmes de lignes larges (dépend de la modélisation de cas d'utilisation/de données). Par conséquent, la clé de partition est parfois spécifiée comme une combinaison de plusieurs colonnes.

En ce qui concerne la confusion dont l'un est obligatoire , lequel peut être ignoré etc. dans une requête, en essayant de imaginez Cassandra comme un HashMap géant aide. Ainsi, 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é. Ainsi, chaque requête doit les spécifier. Sans quoi Cassandra ne saura pas quel nœud rechercher.
Les touches de regroupement (les colonnes, qui sont facultatives) aident à préciser davantage la recherche après que Cassandra trouve le noeud spécifique (et ses répliques) responsable de cette recherche. spécifique Clé de partition.

8
dd9chndn

En bref sens:

Clé de partition n'est rien d'autre que identification pour une ligne, cette identification est la plupart du temps une seule colonne (appelée clé primaire), parfois une combinaison de plusieurs colonnes (appelées Composite Partition Key).

clé de cluster n'est rien mais indexation & tri. Les clés de cluster dépendent de peu de choses:

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

  2. Si vous avez des dossiers très volumineux, je peux alors diviser la date pour faciliter la gestion. Exemple, j'ai des données de 1 million d'un registre de population du comté. Donc, pour une gestion facile, je cluster les données en fonction de l'état et après le code PIN, etc.

3
Sun

Il est intéressant de noter que vous utiliserez probablement plus ces lots que dans des concepts similaires du monde relationnel (clés composites).

Exemple - supposons que vous deviez trouver les N derniers utilisateurs ayant récemment rejoint le groupe d'utilisateurs X. Comment feriez-vous cela efficacement, étant donné que les lectures sont prédominantes dans ce cas? Comme ça (de l'offical guide 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 un joint Date. La raison pour laquelle une clé de clustering est une date de jointure est que les résultats sont déjà triés (et stocké, 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 peut aider? Désormais, les utilisateurs du même groupe et de la même date de participation résideront dans une seule partition! Cela signifie que nous lirons toujours le moins de partitions possible (commencez par les plus récentes, puis par les plus anciennes, au lieu de sauter entre elles).

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

0
kboom

La clé primaire dans Cassandra se compose généralement de deux parties - Clé de partition et Colonnes de cluster.

primary_key ((partition_key), clustering_col)

Clé de partition - La première partie de la clé primaire. L'objectif principal d'une clé de partition est d'identifier le nœud qui stocke la ligne en question.

CREATE TABLE phone_book (phone_num int, nom du texte, age int, texte de la ville, PRIMARY KEY ((phone_num, nom), age);

Ici, (phone_num, name) est la clé de partition. Lors de l'insertion des données, la valeur de hachage de la clé de partition est générée et cette valeur détermine le nœud dans lequel la ligne doit être placée.

Considérons un cluster à 4 nœuds, chaque nœud a une plage de valeurs de hachage qu'il peut stocker. (Écrivez) INSERT INTO phone_book VALUES (7826573732, "Joey", 25, "New York");

Maintenant, la valeur de hachage de la clé de partition est calculée par le partitionneur Cassandra. disons, valeur de hachage (7826573732, "Joey") → 12, cette ligne sera maintenant insérée dans Node C.

(Lire) SELECT * FROM phone_book WHERE phone_num = 7826573732 et name = ’Joey’;

Maintenant, la valeur de hachage de la clé de partition (7826573732, `Joey’) est calculée, elle est égale à 12 dans notre cas et réside dans Node C, à partir de laquelle la lecture est effectuée.

  1. Colonnes de clustering - Deuxième partie de la clé primaire. La mise en cluster des colonnes a pour objectif principal de stocker les données dans un ordre trié. Par défaut, l'ordre est croissant.

Il peut y avoir plus d'une clé de partition et de colonnes de clustering dans une clé primaire en fonction de la requête que vous résolvez.

primary_key ((pk1, pk2), col 1, col2)

0
Sumon Saikan