Apache Cassandra
Concepts et fonctionnalités

Romain Hardouin

Lyon Cassandra Users
Plan
Présentation de Cassandra
Concepts clés
Installation
Les outils DataStax : DevCenter et OpsCenter
Modèle de données
Requêtes
Présentation de Cassandra
“Semblable à l'Aphrodite d'or” – Homère
NoSQL*
* ≠ Big Data

Lyon Cassandra Users
Big Data*
* 3V = Volume, Vélocité, Variété

Lyon Cassandra Users
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
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
Qui l'utilise ?
Qui l'utilise ?
Concepts clés
Architecture
Cluster
●

Noeud = Instance de Cassandra

●

Cluster = Ring = Ensemble des noeuds
Théoreme CAP
●

Seuls deux des trois sont réalisables
Haute disponibilité

A

C

Cohérence

@eric_brewer

P Tolérance aux
partitionnements
Théoreme CAP
●

En pratique
–

Continuum

–

Consistency Level (CL)

–

A

Latence !

C

P
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
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
Gossip
●

Protocole epidémique de communication P2P

●

Echange d'informations chaque seconde

●

Réseau overlay maillé complet
Partitioner
●

Token = f
–
–

●

Murmur3, MD5
BOP

Token => noeud

(row)

Lyon
Venise

pays gentilé
FR

Lyonnais

pays gentilé
IT

Vénitiens
Facteur de réplication
●

Nombre d'occurrences d'une donnée
–

Replication Factor (RF)

RF = 2
Réplication
●

Replica placement strategy
–

NetworkTopologyStrategy
Lyon

RF = 2

pays gentilé
FR

Lyonnais
Snitch
●

Comment connaitre la topologie du réseau ?
–

PropertyFile, GossipingPropertyFile

–

EC2(MultiRegion)

–

RackInferring

10 . 1 . 2 . 3
DC

Noeud
Rack
Coordinator
●

P2P => on contacte n'importe quel noeud

●

Noeud contacté = coordinateur

●

Le coordinateur contacte les répliques (proxy)

Client
Ecriture
●

Exemple avec RF = 2, CL = ONE

Client
Repair
●

Hinted-handoff
–

●

Read repair
–

●

Fenêtre paramétrable
Probabilité paramétrable

Anti-entropy repair
–

Indispensable

–

Généralement hebdomadaire
Installation
Installation
●

Linux
–

Production

●

Windows

●

Mac OS

●

Ne pas mixer les OS
Java
●

Oracle JDK
–
–

●

Cassandra 1 : v6
Cassandra 2 : v7

Production
–

Java Native Access (JNA)
Debian
●

Apache
–

deb http://www.apache.org/dist/cassandra/debian V main
●

●

V = 12x, 20x

DataStax
–

deb http://debian.datastax.com/community stable main
●
●
●

Cassandra, DevCenter, OpsCenter, DSC
apt-get install cassandra → v2.0
apt-get install cassandra=1.2.15
RedHat / CentOS
●

DataStax
–

http://rpm.datastax.com/community
●

Cassandra, DevCenter, OpsCenter, DSC
Les outils DataStax
DevCenter et OpsCenter
DevCenter
OpsCenter
OpsCenter
Modèle de données
SGBD orienté colonnes
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
Column
●

Time to live
–

Ne remplace pas une purge métier

Nom
Valeur
Timestamp
TTL
Column
●

Compteur distribué
–

Type spécial

Nom
Valeur
Timestamp
Column
●

Nom porteur d'informations
–

Colonne composite

–

Intérêt : requêtage

“ rhone:* ”
rhone:bron

rhone:lyon

rhone:villeurbanne

Valeur
Timestamp

Valeur
Timestamp

Valeur
Timestamp
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
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é
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
Keyspace
●

Exemple
–

Timestamp non représentés
meetup.com
members

events
30a9e2d2
...

31369e8e

event_name

event_date

Cassandra

2014-02-25

...

...

event_name

event_date

Hadoop

2014-03-13

bob

firstname

...

Robert

...

...

bill

firstname
William

...
Requêtes
SELECT * FROM big_data
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»
Par où commencer
●

Penser “requête”
–
–

●

Critères de recherches
Tris

Penser “alimentation”
–

Comment les données arrivent ?

–

Données brutes ?
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"
"events by city"

TimeUUID

events_by_city
lyon

31369e8e

... 30a9e2d2

<valueless> ... <valueless>

Valueless pattern

events
30a9e2d2
...

31369e8e

event_name

event_date

Cassandra

2014-02-25

...

...

event_name

event_date

Hadoop

2014-03-13
Penser "requêtes"
●

Comment faire sans aggregation ?
–

Peu de données : travail en mémoire

–

Big data : Hadoop, Hive, Pig, etc.
Penser "alimentation"
Exemple : séries temporelles => wide rows
–

Données financières
●

–

Actions, produits dérivés, etc.

Données brutes
●

Capteurs, satellites, etc.
sensors
Sensor_1:<date>

e598170e
<blob>

e53a9da4

...

e408c24e

<blob>

...

<blob>

100 mesures / s => 8 640 000 colonnes
CQL
●

Simplifie l'utilisation
–

●

cqlsh, DevCenter

CQL 3
–

Cassandra >= 1.2

CQL

Implémentation
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']
);
Référence
DataStax : datastax.com
www.datastax.com/docs

Interview Ryan King (Twitter) :
http://nosql.mypopescu.com/post/407159447/cassandra-twitter-an-interview-with-ryan-king

Apache Cassandra - Concepts et fonctionnalités