Guide Complet des Index Apache Cassandra: Index Secondaires et SASI Expliqués en Détail

Apache Cassandra, en tant que base de données NoSQL distribuée haute performance, utilise des mécanismes d'indexation cruciaux pour améliorer l'efficacité des requêtes. Ce guide approfondi analyse les deux types d'index fondamentaux de Cassandra - les index secondaires et les index SASI - afin d'aider les développeurs à maîtriser les méthodes de récupération de données efficaces.

Comprendre les Index Secondaires

Les index secondaires représentent le type d'index le plus fondamental dans Cassandra, établissant une relation de correspondance entre les colonnes et les clés de ligne pour permettre des requêtes basées sur des colonnes autres que la clé primaire. Leur implémentation principale se trouve dans src/java/org/apache/cassandra/db/index/SecondaryIndex.java, fournissant un cadre de base pour la création, la validation et l'interrogation d'index.

Mécanisme de Fonctionnement des Index Secondaires

Lors de la création d'un index secondaire sur une table, Cassandra maintient automatiquement une table d'index cachée qui stocke la correspondance entre les valeurs de colonnes indexées et les clés primaires. Chaque fois que des données sont écrites, le système met à la fois à jour la table de base et la table d'index, garantissant la cohérence des données. Pour les requêtes, Cassandra utilise d'abord la table d'index pour trouver les clés primaires correspondantes, puis récupère les données complètes à partir de la table de base.

Syntaxe d'Utilisation de Base

La syntaxe standard pour créer un index secondaire est la suivante :

CREATE INDEX [nomIndex] ON tableFamille (nomColonne);

Cette syntaxe, définie dans le fichier src/java/org/apache/cassandra/cql/Cql.g, permet de créer des index sur des colonnes non primaires des tables.

Cas d'Utilisation et Limites

Scénarios d'Application Idéaux :

  • Colonnes à faible cardinalité (comme les indicateurs d'état, les étiquettes de catégorie)
  • Contextes métier avec beaucoup de lectures et peu d'écritures
  • Requêtes auxiliaires sur des champs non clés

Principales Limitations :

  • Inadapté aux colonnes à haute cardinalité (comme les ID utilisateur, les horodatages)
  • Peut entraîner une augmentation du délai de requête dans les environnements distribués
  • La maintenance de l'index consomme des performances d'écriture supplémentaires

Index SASI : Index de Chaînes Avancées

SASI (SSTable Attached Secondary Index) est un type d'index avancé fourni par Cassandra, optimisé spécifiquement pour les performances de requête sur les colonnes de type chaîne, supportant des fonctionnalités avancées comme la correspondance de préfixe et les requêtes d'intervalle.

Avantages Fondamentaux de SASI

Par rapport aux index secondaires traditionnels, SASI offre les fonctionnalités amélioratives suivantes :

  • Support des requêtes de correspondance de préfixe (comme WHERE name LIKE 'J%')
  • Support des requêtes d'intervalle (comme WHERE age > 30)
  • Occupation mémoire réduite et efficacité de requête améliorée
  • Analyseur configurable supportant la tokenisation de texte

Exemples de Création et d'Utilisation

La syntaxe CQL pour créer un index SASI est la suivante :

CREATE CUSTOM INDEX ON utilisateurs (nom) 
USING 'org.apache.cassandra.index.sasi.SASIIndex' 
WITH OPTIONS = {
  'mode': 'CONTAINS',
  'analyzer_class': 'org.apache.cassandra.index.sasi.analyzer.StandardAnalyzer',
  'case_sensitive': 'false'
};

Principes d'Implémentation et Optimisation des Performances

Les index SASI attachent des structures de données d'index dans les fichiers SSTable, évitant ainsi la surcharge de maintenance d'une table d'index séparée comme pour les index secondaires traditionnels. Leur code d'implémentation se trouve dans le paquet org.apache.cassandra.index.sasi, réalisant des capacités de recherche de chaînes efficaces grâce à des analyseurs personnalisés et des modes d'indexation.

Stratégie de Sélection d'Index

Comparaison : Index Secondaires vs SASI

Caractéristique Index Secondaires Index SASI
Support des types de données Tous les types Principalement optimisé pour les chaînes
Types de requête Correspondance exacte Correspondance exacte, préfixe, intervalle
Occupation mémoire Élevée Réduite
Impact sur les performances d'écriture Considérable Faible
Cardinalité de données adaptée Faible cardinalité Moyenne à haute cardinalité

Recommandations Pratiques

  1. Éviter la sur-indexation : Chaque index augmente la charge d'écriture, il est recommandé de créer des index uniquement sur les champs fréquemment interrogés
  2. Gestion des colonnes à haute cardinalité : Pour les colonnes comme les ID utilisateur uniques, envisager l'utilisation de vues matérialisées comme alternative aux index
  3. Optimisation des requêtes : L'utilisation prudente de la clause ALLOW FILTERING est nécessaire, car elle peut conduire à des balayages de table complète
  4. Maintenance régulière : Optimiser les performances des index avec la commande nodetool rebuild_index

Gestion et Maintenance des Index

Surveillance de la Création d'Index

Lors de la créasion d'index, Cassandra exécute le processus de construction en arrière-plan. La progression peut être surveillée comme suit :

nodetool compactionstats

Reconstruction d'Index

Lorsque les données d'index présentent des incohérences, la commande suivante permet de reconstruire l'index :

nodetool rebuild_index <espaceCles> <table> <nomIndex>

Suppression d'Index

La suppression des index inutiles libère de l'espace de stockage et améliore les performances d'écriture :

DROP INDEX [IF EXISTS] nomIndex;

Étiquettes: Apache Cassandra NoSQL indexation secondaire SASI CQL

Publié le 3 juillet à 02h21