Cassandra (base de données)
Créateur | Avinash Lakshman (d) et Prashant Malik (d) |
---|---|
Développé par | Fondation Apache |
Première version | |
Dernière version | 5.0.2 ()[1] |
Dépôt | gitbox.apache.org/repos/asf/cassandra.git, github.com/apache/cassandra et git-wip-us.apache.org/repos/asf?p=cassandra.git |
État du projet | en développement actif |
Écrit en | Java[2] |
Système d'exploitation | Linux et type Unix |
Environnement | Multiplate-forme |
Type | Base de données orientée colonnes |
Licence | Licence Apache 2 (Logiciel libre) |
Site web | cassandra.apache.org |
Apache Cassandra est un système de gestion de base de données (SGBD) de type NoSQL conçu pour gérer des quantités massives de données sur un grand nombre de serveurs, assurant une haute disponibilité en éliminant les points de défaillance unique. Il permet une répartition robuste sur plusieurs centres de données[3], avec une réplication asynchrone sans nœud maître et une faible latence pour les opérations de tous les clients.
Cassandra met l'accent sur la performance. En 2012, des chercheurs de l'université de Toronto étudiant les systèmes NoSQL ont conclu : « en termes d'adaptabilité, il y a un gagnant indiscutable. Cassandra atteint le plus fort débit sur le maximum de nœuds dans tous les tests » même si « cela se fait au détriment d'une latence élevée sur les lectures et les écritures »[4].
Le projet est publié en logiciel libre et porté par la fondation Apache.
Histoire
[modifier | modifier le code]Initialement développée par Facebook, l'application a été mise à disposition en logiciel libre en juillet 2008, et rapidement adopté par des entreprises gérant d'importants volumes de données, telles Twitter[5], Netflix[6], digg.com[7] ou Spotify[8]. Jeff Hammerbacher (en), directeur de la division Data chez Facebook, a décrit Cassandra comme une application de type BigTable servie par une infrastructure proche de Amazon DynamoDB (en).
En 2023 selon db-engines.com[9], Cassandra occupe la 12e place dans le classement des systèmes de gestion de bases de données les plus populaires tous types confondus, et la 4e place pour les systèmes de gestion de bases de données NoSQL (derrière MongoDB, Redis et Elasticsearch).
Fonctionnalités
[modifier | modifier le code]Décentralisation
[modifier | modifier le code]Tous les nœuds d'une grappe ont le même rôle. Il n'y a pas de point de défaillance unique. Les données sont distribuées dans la grappe de serveurs (chaque nœud contient des données différentes), et il n'y a pas de nœud maître : tous les nœuds peuvent traiter toutes les requêtes.
Langage de requête
[modifier | modifier le code]Le langage de requête spécifique à Cassandra s'appelle CQL (pour Cassandra Query Language). Des implémentations existent pour les langages Java (JDBC), Python (DBAPI2), Node.js (Helenus), Go (gocql),C_Sharp (CassandraCSharpDriver) et C++.
Voici un exemple de création d'un espace de clés contenant une famille de colonnes en CQL 3.0[10] :
CREATE KEYSPACE MonEspaceDeCle
WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 3 };
USE MonEspaceDeCle;
CREATE COLUMNFAMILY MesColonnes (id text, Nom text, Prenom text, PRIMARY KEY(id));
INSERT INTO MesColonnes (id, Nom, Prenom) VALUES ('1', 'Doe', 'John');
SELECT * FROM MesColonnes;
Ce qui donne :
id | nom | prenom
----+-----+--------
1 | Doe | John
(1 rows)
Modèle de données
[modifier | modifier le code]Cassandra est basée sur une structuration en paires clé-valeur de type cohérent à terme[11]. L'architecture relationnelle est orientée colonne, avec des éléments plus traditionnels (stockage horizontal des paires). Les données sont distribuées selon leur clé primaire dans des tables. Le premier élément de cette clé primaire est appelé clé de partition; dans une partition, les données sont groupées selon les autres colonnes composant la clé primaire. D'autres colonnes peuvent être indexées séparément de la clé primaire.
Des tables peuvent être créées, supprimées ou modifiées pendant l'exécution, sans bloquer les modifications et les requêtes.
Cassandra ne peut ni faire de jointures, ni sous-requêtes. Cassandra privilégie la dénormalisation des données.
Notes et références
[modifier | modifier le code]- « Release cassandra-5.0.2 »
- (en) « Apache/cassandra », sur GitHub (consulté le ).
- (en) Joaquin Casares, « Multi-datacenter Replication in Cassandra », DataStax, (consulté le ) : « Cassandra’s innate datacenter concepts are important as they allow multiple workloads to be run across multiple datacenters… »
- (en) Tilmann Rabl, Mohammad Sadoghi, Hans-Arno Jacobsen, Sergio Gomez- Villamor, Victor Muntes Mulero - et Serge Mankovskii, « Solving Big Data Challenges for Enterprise Application Performance Management », VLDB, (consulté le ) : « In terms of scalability, there is a clear winner throughout our experiments. Cassandra achieves the highest throughput for the maximum number of nodes in all experiments... this comes at the price of high write and read latencies »
- (en) « Cassandra @ Twitter: An Interview with Ryan King », sur nosql.mypopescu.com, (consulté le )
- « Comment Netflix a survécu au redémarrage d'Amazon EC2 - Le Monde Informatique », sur Le Monde informatique (consulté le ).
- « Looking to the future with Cassandra | Digg About » (version du sur Internet Archive)
- (en) « Switching user database on a running system », sur labs.spotify.com, (consulté le )
- (en) « DB-Engines Ranking - popularity ranking of database management systems », sur db-engines.com (consulté le )
- (en) « The Cassandra Query Language (CQL) », sur Apache Cassandra (consulté le ).
- (en) Avinash Lakshman et Prashant Malik, « Cassandra - A Decentralized Structured Storage System » [PDF]