Principes et Utilisation de Cassandra

Temps de lecture : 15 minutes Introduction à Cassandra, une base de...

Temps de lecture : 15 minutes

  • Introduction à Cassandra, une base de données NoSQL orientée colonnes. Présentation de sa structure, des opérations de base, et des exemples d’utilisation.

 

Introduction à Cassandra, une Base de Données NoSQL Orientée Colonnes

Apache Cassandra est une base de données NoSQL distribuée et orientée colonnes, conçue pour gérer de grandes quantités de données réparties sur de nombreux serveurs tout en assurant une haute disponibilité et une tolérance aux pannes. Cette leçon présente Cassandra, en détaillant sa structure, ses opérations de base, et des exemples d’utilisation concrets.

 

Partie 1 : Présentation de Cassandra

 

Qu’est-ce qu’Apache Cassandra ?

  • Définition : Cassandra est une base de données NoSQL distribuée, développée initialement par Facebook et maintenant maintenue par la Fondation Apache. Elle est orientée colonnes et conçue pour offrir une haute disponibilité sans point de défaillance unique.
  • Caractéristiques Clés :
    • Scalabilité Horizontale : Capacité à ajouter facilement des nœuds pour augmenter la capacité de stockage et la performance.
    • Tolérance aux Pannes : Réplication des données sur plusieurs nœuds pour assurer la disponibilité en cas de défaillance matérielle.
    • Performances Élevées : Optimisée pour des lectures et des écritures rapides.

 

Structure de Cassandra

 

Composants Principaux

  1. Cluster : Ensemble de nœuds (serveurs) travaillant ensemble pour fournir une base de données distribuée.
  2. Nœud (Node) : Unité de base de stockage dans Cassandra, chaque nœud fait partie d’un cluster.
  3. Data Center : Groupe de nœuds dans le même emplacement physique, utilisé pour la gestion de la réplication des données.
  4. Keyspace : Conteneur logique pour les données, équivalent à une base de données dans les systèmes relationnels.
  5. Table : Collection de lignes similaires à une table dans les bases de données relationnelles, mais organisée en colonnes.

 

Modèle de Données

  • Clé Primaire : Composée d’une clé de partition (partition key) et éventuellement d’une clé de clustering (clustering key).
  • Colonne : Unité de stockage de base dans Cassandra, chaque ligne peut avoir un ensemble de colonnes différent.
  • Famille de Colonnes : Groupe de colonnes stockées ensemble.

 

Exemple de Structure

Création d’un keyspace

 

Création d’une table
Insertion d’une ligne
				
					-- Création d'un keyspace avec une stratégie de réplication simple
CREATE KEYSPACE example_keyspace
WITH replication = {
  'class': 'SimpleStrategy',
  'replication_factor': 3
};
				
			
				
					-- Création d'une table dans le keyspace example_keyspace
CREATE TABLE example_keyspace.users (
  user_id UUID PRIMARY KEY,
  name TEXT,
  email TEXT,
  age INT
);
				
			
				
					-- Insertion d'une ligne dans la table users du keyspace example_keyspace
INSERT INTO example_keyspace.users (user_id, name, email, age)
VALUES (uuid(), 'Alice', 'alice@example.com', 30);
				
			

Partie 2 : Opérations de Base avec Cassandra

 

Création de Keyspace et Tables

 

Création d’un Keyspace

  • Syntaxe : Utilisation de la commande CREATE KEYSPACE
  • Exemple Pratique :
				
					-- Création d'un keyspace avec une stratégie de réplication simple
CREATE KEYSPACE my_keyspace
WITH replication = {
  'class': 'SimpleStrategy',
  'replication_factor': 3
};
				
			

Création de Tables

  • Syntaxe : Utilisation de la commande CREATE TABLE

 

Exemple Pratique

				
					-- Création d'une table pour stocker des informations sur les utilisateurs
CREATE TABLE my_keyspace.users (
  user_id UUID PRIMARY KEY,
  name TEXT,
  email TEXT,
  age INT
);
				
			

Opérations CRUD (Create, Read, Update, Delete)

Create (Créer)

  • Insertion de Données : Utilisation de la commande INSERT INTO
  • Exemple Pratique :
				
					-- Insertion d'une ligne dans la table users
INSERT INTO my_keyspace.users (user_id, name, email, age)
VALUES (uuid(), 'Bob', 'bob@example.com', 25);
				
			

Read (Lire)

  • Requêtes de Lecture : Utilisation de la commande SELECT
  • Exemple Pratique :
				
					-- Sélection de toutes les lignes de la table users
SELECT * FROM my_keyspace.users;
				
			
				
					-- Sélection de lignes de la table users où l'âge est supérieur à 25
SELECT * FROM my_keyspace.users WHERE age > 25;
				
			

Update (Mettre à Jour)

  • Mise à Jour de Données : Utilisation de la commande UPDATE
  • Exemple Pratique :
				
					-- Mise à jour de l'âge d'un utilisateur
UPDATE my_keyspace.users SET age = 26 WHERE user_id = 'some-uuid';
				
			

Delete (Supprimer)

  • Suppression de Données : Utilisation de la commande DELETE
  • Exemple Pratique :
				
					-- Suppression d'une ligne de la table users
DELETE FROM my_keyspace.users WHERE user_id = 'some-uuid';
				
			

Partie 3 : Exemples d’Utilisation de Cassandra

 

Utilisation dans une Application de Commerce Électronique

 

Contexte

  • Objectif : Gérer les informations sur les produits, les utilisateurs, et les commandes.
  • Défis : Besoin de haute disponibilité, de performances élevées pour les recherches de produits, et de gestion de grandes quantités de données transactionnelles.

Implémentation

Création d’une table pour les produits avec une clé de clustering
Insertion d’un produit
Requête pour récupérer les produits avec un prix inférieur à 1000
				
					-- Création d'une table pour les produits avec price comme clé de clustering
CREATE TABLE my_keyspace.products (
  product_id UUID,
  name TEXT,
  description TEXT,
  price DECIMAL,
  PRIMARY KEY (product_id, price)
);
				
			
				
					-- Insertion d'un produit dans la table products
INSERT INTO my_keyspace.products (product_id, name, description, price)
VALUES (uuid(), 'Laptop', 'High performance laptop', 999.99);
				
			
				
					-- Requête pour récupérer les produits avec un prix inférieur à 1000
SELECT * FROM my_keyspace.products WHERE price < 1000 ALLOW FILTERING;
				
			

Utilisation dans une Application de Réseaux Sociaux

 

Contexte

  • Objectif : Gérer les profils des utilisateurs, les publications, et les interactions (likes, commentaires).
  • Défis : Besoin de gérer de grandes quantités de données et d’assurer une disponibilité continue.

Implémentation

Création d’une table pour les publications
Insertion d’une publication
Requête pour récupérer les publications d’un utilisateur
				
					-- Création d'une table pour les publications avec user_id comme partie de la clé primaire
CREATE TABLE my_keyspace.posts (
  post_id UUID,
  user_id UUID,
  content TEXT,
  timestamp TIMESTAMP,
  PRIMARY KEY (user_id, post_id)
);

				
			
				
					-- Insertion d'une publication dans la table posts
INSERT INTO my_keyspace.posts (post_id, user_id, content, timestamp)
VALUES (uuid(), 'user-uuid', 'Hello World!', toTimestamp(now()));

				
			
				
					-- Requête pour récupérer les publications d'un utilisateur spécifique
SELECT * FROM my_keyspace.posts WHERE user_id = 'user-uuid';

				
			

Conclusion

Apache Cassandra est une base de données NoSQL puissante et évolutive, conçue pour gérer de grandes quantités de données réparties sur de nombreux serveurs tout en assurant une haute disponibilité et une tolérance aux pannes. Sa structure orientée colonnes et ses capacités de scalabilité horizontale en font une solution idéale pour des applications nécessitant des performances élevées et une gestion efficace des données distribuées. Cette leçon a fourni une introduction détaillée à Cassandra, couvrant sa structure, ses opérations de base, et des exemples pratiques d’utilisation dans divers scénarios. En comprenant et en appliquant ces concepts, les développeurs peuvent exploiter pleinement les capacités de Cassandra pour créer des applications robustes et évolutives.