Apache Cassandra - Concepts et fonctionnalités, 25/02/2014
Présentation de Cassandra pour le premier évènement "Lyon Cassandra Users" (organisé par DataStax & Zenika).
* Présentation de Cassandra
* Concepts clés (Théorie & Architecture)
* Installation
* Les outils DataStax : DevCenter et OpsCenter
* Modèle de données
* Requêtes
6. Cassandra
●
SGBD NoSQL orienté colonnes
●
Distribué : P2P
●
Haute disponibilité : no SPOF
●
Massivement parallèle
●
Scalabilité linéaire
●
Multi data centers
●
Réplication native
●
Open source : Facebook → Apache
7. What were the top reasons for going with Cassandra?
●
No single points of failure
●
Highly scalable writes (we have highly variable write traffic)
●
A healthy and productive open source community
– Ryan King
Lyon Cassandra Users
14. Cohérence in fine
●
●
●
Eventually consistency
A un instant T, la donnée la plus récente n'est
pas présente partout
Pas de suppression instantanée
–
Tombstone
15. Cohérence paramétrable
●
Combien de répliques écrites/lues avant
aquittement
●
●
●
–
ONE, QUORUM, ALL
ANY
SERIAL
Datacenter aware :
●
●
LOCAL_ONE, LOCAL_QUORUM
EACH_QUORUM
34. Column
●
Identifiée par son nom
●
Valeur et nom typés
–
blob, int, text, timestamp, timeuuid, uuid, ...
≤ 9 MO conseillé
Max 2 GO
Nom
Valeur
Timestamp
Résout les conflits => NTP, VMWare tools
38. Row
●
Identifiée par sa clé (typée)
●
Contient des colonnes, triées par nom
●
Une ligne est stockée sur un seul noeud *
2.109
Nom colonne 1 ... N
Clé
Valeur colonne 1
Timestamp
* hors réplication
39. Column Family (CF)
●
Regroupe les lignes et donc les colonnes
●
Les lignes ne sont pas triées *
●
Arena allocation : ≤ 1000 CF
Nom CF
Colonne 1
Clé 1
... N
Valeur 1
Timestamp
...
...
Colonne 1
Clé N
... N
Valeur 1
Timestamp
* sauf si le ByteOrderedPartitioner est utilisé
40. Keyspace
●
Regroupe les column families
●
Peut coûteux en mémoire
Nom keyspace 1
Nom CF N
Nom CF 1
Colonne 1 ... N
Colonne 1 ... N
Clé 1
Clé 1
Valeur 1
Timestamp
Timestamp
Colonne 1 ... N
...
Valeur 1
Timestamp
Valeur 1
...
Colonne 1 ... N
...
Valeur 1
Timestamp
43. NoSQL
●
Les applications doivent en faire plus
–
–
●
Moins de fonctionnalités que les SGBDR
Dénormalisation
Pas de transactions
–
V1.0 : Row level isolation
–
v2.0 : Lightweight transactions, CAS
●
Pas de jointures
●
Pas de «GROUP BY»
44. Par où commencer
●
Penser “requête”
–
–
●
Critères de recherches
Tris
Penser “alimentation”
–
Comment les données arrivent ?
–
Données brutes ?
45. Penser "requêtes"
●
Comment faire sans jointures ?
–
–
●
Peu de données : 2 requêtes + filtre mémoire
Big data : autant de Column Family que de requêtes
Exemple :
–
Rechercher les meetup d'une ville
–
SELECT * FROM events WHERE city = 'Lyon'
–
Column Family "events by city"
50. CQL
CREATE TABLE members (
username text,
firstname text,
email list<text>,
PRIMARY KEY (username)
);
members
bob
firstname
...
Robert
...
...
bill
...
firstname
...
William
INSERT INTO members (username, firstname,
email)
VALUES ('bob', 'Robert',
['bob@gmail.com', 'bob@yahoo.fr']
);