Apache Cassandra

Base de donnees NoSQL distribuee - scalabilite lineaire, pas de point unique de defaillance, volumes massifs

TL;DR

Quoi: Une base de données NoSQL distribuée conçue pour la haute disponibilité et la scalabilité.

Pourquoi: Pas de point unique de défaillance, scalabilité linéaire, gère d’énormes volumes de données.

Quick Start

Installer avec Docker:

docker run --name cassandra -p 9042:9042 -d cassandra:latest

Se connecter:

docker exec -it cassandra cqlsh

Créer keyspace et table:

CREATE KEYSPACE myapp WITH replication = {
  'class': 'SimpleStrategy',
  'replication_factor': 1
};

USE myapp;

CREATE TABLE users (
  user_id UUID PRIMARY KEY,
  name TEXT,
  email TEXT,
  created_at TIMESTAMP
);

Cheatsheet

CommandeDescription
DESCRIBE KEYSPACES;Lister les keyspaces
USE keyspace;Sélectionner un keyspace
DESCRIBE TABLES;Lister les tables
DESCRIBE TABLE name;Afficher le schéma de table
SELECT * FROM table;Interroger les données
INSERT INTO table (...) VALUES (...);Insérer des données
EXIT;Quitter cqlsh

Gotchas

Data modeling (query-first)

-- Concevoir les tables en fonction des requêtes, pas des relations
-- Requête: Obtenir tous les posts par utilisateur, triés par date
CREATE TABLE posts_by_user (
  user_id UUID,
  post_id TIMEUUID,
  title TEXT,
  content TEXT,
  PRIMARY KEY (user_id, post_id)
) WITH CLUSTERING ORDER BY (post_id DESC);

CRUD operations

-- Insertion
INSERT INTO users (user_id, name, email, created_at)
VALUES (uuid(), 'John', '[email protected]', toTimestamp(now()));

-- Sélection
SELECT * FROM users WHERE user_id = some-uuid;

-- Mise à jour
UPDATE users SET name = 'Johnny'
WHERE user_id = some-uuid;

-- Suppression
DELETE FROM users WHERE user_id = some-uuid;

Primary key structure

-- Clé de partition uniquement
PRIMARY KEY (user_id)

-- Clé de partition + colonne de clustering
PRIMARY KEY (user_id, created_at)

-- Clé de partition composite
PRIMARY KEY ((country, city), user_id)

Collections

-- Liste
emails LIST<TEXT>

-- Set
tags SET<TEXT>

-- Map
properties MAP<TEXT, TEXT>

Next Steps