Créer et déposer un INDEX dans Cassandra

⚡ Résumé intelligent

Créer et supprimer un index dans Cassandra Permet de filtrer les colonnes qui ne font pas partie de la clé primaire. Cette page aborde les commandes CREATE INDEX et DROP INDEX, les règles de nommage, les types d'index disponibles et les cas où la création d'un index est inappropriée.

  • ???? Pourquoi Index : Sans index, une clause WHERE ne peut faire référence qu'aux colonnes de clé primaire.
  • 🏷️ Règle de dénomination : Un index sans nom est créé sous la forme TableName_ColumnName_idx et doit être supprimé sous ce nom.
  • (I.e. Maintenance automatique : Les lignes existantes sont indexées lors de leur création, et les nouvelles lignes sont indexées lors de leur écriture, sans autre intervention.
  • 🚫 Restrictions: Les colonnes de clé primaire étant déjà indexées, un index secondaire sur celles-ci est rejeté.
  • (I.e. L'importance de la cardinalité : Des colonnes à cardinalité très élevée ou très faible rendent un index lent ou inutile.
  • 🧱 Meilleure alternative : Une table de requêtes conçue à cet effet est généralement plus performante qu'un index secondaire à grande échelle.

Créer et supprimer un index dans Cassandra

Cassandra Créer un index

La commande 'Créer un index' crée un index sur la colonne spécifiée par l'utilisateur. Si les données existent déjà pour la colonne que vous souhaitez indexer, Cassandra crée des index sur les données lors de l'exécution de l'instruction 'create index'.

  • Après avoir créé un index, Cassandra indexe automatiquement les nouvelles données lorsque les données sont insérées.
  • L'index ne peut pas être créé sur la clé primaire car une clé primaire est déjà indexée.
  • Les index sur les colonnes de collection sont pris en charge, sous la forme KEYS, VALUES ou ENTRIES, selon ce qui doit être recherché.
  • Sans indexation sur la colonne, Cassandra Impossible de filtrer cette colonne sauf s'il s'agit d'une clé primaire.

C'est pourquoi, pour filtrer les colonnes dans CassandraDes index doivent être créés.

Syntaxe

CREATE INDEX IndexName ON KeyspaceName.TableName (ColumnName);

Exemple

Voici l'instantané où il a été essayé de filtrer la colonne « dept » sans créer l'index. En réponse, l'erreur a été renvoyée.

Cassandra Créer un index

Voici l'instantané où l'index est créé sur la colonne dept.

Cassandra Créer un index

CREATE INDEX DeptIndex ON University.Student (dept);

Voici l'instantané où il sera filtré avec succès dans la colonne « département ».

Cassandra Créer un index

SELECT * FROM University.Student WHERE dept = 'CS';

Le nom de l'index est facultatif. L'omettre permet Cassandra Il en génère un automatiquement, ce qui est important lorsque l'index doit être supprimé ultérieurement.

CREATE INDEX IF NOT EXISTS ON University.Student (dept);

Cassandra Supprimer l'index

La commande 'Supprimer l'index' supprime l'index spécifié. Si le nom de l'index n'a pas été donné lors de la création de l'index, alors le nom de l'index est TableName_ColumnName_idx.

  • Si l'index n'existe pas, il renverra une erreur à moins que IF EXISTS ne soit utilisé, ce qui renverra no-op.
  • Vous devez spécifier le nom de l'espace de clés avec le nom de l'index, sinon l'index sera recherché dans l'espace de clés actuel.

Syntaxe

DROP INDEX IF EXISTS KeyspaceName.IndexName;

Exemple

Voici l'instantané de la commande exécutée 'Drop index' qui supprime l'index DeptIndex.

Cassandra Supprimer l'index

DROP INDEX IF EXISTS University.DeptIndex;

Après une exécution réussie de la commande, DeptIndex sera supprimé de l'espace de clés. Désormais, les données ne peuvent pas être filtrées par le service de colonnes.

Pour confirmer quels index existent avant la suppressionping Premièrement, décrivez le tableau et lisez les définitions d'index au bas du résultat.

DESCRIBE TABLE University.Student;

Types d'index dans Cassandra

La commande ci-dessus crée un index secondaire standard, mais il existe trois mécanismes distincts qui se comportent de manière très différente.

Type fonctionnement Meilleur pour
Index secondaire Chaque nœud indexe uniquement ses propres données locales ; par conséquent, une requête sans clé de partition doit contacter chaque nœud. Colonnes de cardinalité modérée interrogées conjointement avec une clé de partition.
Indice SASI Un index joint prenant en charge la correspondance de préfixes et de suffixes LIKE ainsi que les plages numériques. Modèles de recherche textuelle. Encore expérimentaux, il est conseillé de les tester avant leur utilisation en production.
Index attaché au stockage (SAI) Introduit en Cassandra 5.0, partage d'une seule structure d'index entre les colonnes avec une surcharge d'écriture réduite. Le remplacement moderne des deux éléments ci-dessus sur Cassandra 5 groupes.

L'indexation d'une colonne de collection utilise un modificateur qui indique quelle partie indexer.

CREATE INDEX ON University.Teacher (VALUES(Email));
CREATE INDEX ON University.Course (KEYS(prereq));
CREATE INDEX ON University.Course (ENTRIES(prereq));

VALUES recherche les éléments d'un ensemble ou d'une liste, KEYS recherche les clés d'une carte, et ENTRIES associe une paire clé-valeur. L'indexation des collections est traitée plus en détail dans la section suivante. Cassandra collections tutoriel.

Quand ne pas utiliser d'index dans Cassandra

Un index secondaire est pratique, mais ce n'est pas un index relationnel, et son utilisation inappropriée est une cause fréquente de ralentissements. Quatre situations requièrent une approche différente.

  • Cardinalité très élevée. L'indexation d'un élément quasi unique, comme une adresse e-mail, signifie que presque chaque partition contient une ligne correspondante, la requête se propage donc sur l'ensemble du cluster pour renvoyer un seul enregistrement.
  • Cardinalité très faible. L'indexation d'un indicateur à deux valeurs tel qu'actif ou inactif produit d'énormes partitions d'index, et la lecture d'une seule d'entre elles renvoie la moitié de la table.
  • Colonnes fréquemment mises à jour. Chaque modification crée une entrée d'index et une marque de suppression pour l'ancienne, ce qui dégrade les lectures au fil du temps.
  • Requêtes sans clé de partition. Sans cela, le coordinateur doit contacter chaque nœud et fusionner les résultats, ce qui n'est pas viable à mesure que de nouveaux nœuds sont ajoutés.

L'alternative durable consiste en une seconde table indexée par la colonne à rechercher, écrite simultanément à la première. Cela respecte le principe de la requête d'abord décrit dans le Cassandra règles du modèle de donnéeset il limite chaque lecture à une seule partition sur un seul nœud.

En règle générale, un index convient à une colonne de cardinalité modérée interrogée conjointement avec une clé de partition connue. Pour tout autre cas, une table dédiée est préférable.

FAQ

Il n'y a pas de limite stricte, mais chaque index augmente le coût d'écriture et la mémoire utilisée. Deux ou trois index par table constituent un plafond pratique ; au-delà, il est préférable de revoir le modèle de données.

Non. Les lignes existantes sont indexées en arrière-plan et la table reste accessible. Le traitement des grandes tables prend du temps ; la progression peut être suivie avec la commande `nodetool compactionstats`.

Un index pointe vers les lignes de la table de base. Une vue matérialisée est une table distincte, gérée automatiquement avec sa propre clé de partition ; ainsi, ses lectures ciblent une seule partition.

Compte tenu de la liste des requêtes et de la cardinalité des colonnes, l'IA peut classer les candidats de manière pertinente. Elle ne peut cependant pas connaître la fréquence des mises à jour, qui détermine souvent si l'index accumulera des marqueurs supprimés.

Souvent, cela permet d'exécuter une requête rejetée. Considérez cette suggestion comme un signal indiquant qu'un index ou une nouvelle table de requête est réellement nécessaire.

Résumez cet article avec :