introduction à cassandra - campus plex
DESCRIPTION
A french introduction to Cassandra database. You can watch the video from here (in french) http://www.jaxio.com/2012/01/06/introduction-a-cassandra-nosql-video.htmlTRANSCRIPT
![Page 1: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/1.jpg)
Introduction à
Cassandra
CampusPlex - Ajaccio 6 janvier 2012
Nicolas Romanetti
vendredi 6 janvier 12
![Page 2: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/2.jpg)
A propos
๏ Nicolas Romanetti
๏ Co-fondateur JAXIO / Architecte / Développeur
๏ Utilisation de Cassandra lors du Challenge USI 2011
vendredi 6 janvier 12
![Page 3: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/3.jpg)
Mon objectif
๏ Vous faire passer de «c’est quoi ce truc!» à «je pige!»
๏ Vous donner envie d’approfondir le sujet
vendredi 6 janvier 12
![Page 4: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/4.jpg)
Cassandra
๏ Base de données distribuée conçue pour
‣ gérer une grande quantité de données
‣ résister aux pannes
‣ être performante
vendredi 6 janvier 12
![Page 5: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/5.jpg)
Historique
๏ Créée par Facebook (Inbox search)
๏ Open Source en 2008
๏ Top Level Apache Project en 2010
๏ Abandonné par Facebook en 2010
๏ Utilisée par Netflix, Twitter, etc...
vendredi 6 janvier 12
![Page 6: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/6.jpg)
Data Model☞ vocabulaire déroutant...
vendredi 6 janvier 12
![Page 7: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/7.jpg)
Column
name
value
timestamp
La colonne est la plus petite unité de donnéename: 64Ko maxvalue: 2Go max
vendredi 6 janvier 12
![Page 8: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/8.jpg)
Row Key
Row
col. name
col. value
col. name
col. value
col. name
col. value
col. name
col. valueRow
column
row key: 64ko maxnb max de colonnes: 2 milliards
Une row: un ensemble de «columns»
vendredi 6 janvier 12
![Page 9: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/9.jpg)
jgrana
http://www.facebook.com/jerome.granados
nico
@nromanetti
mobile
0612345678
tél. fixe
0495123456
Pas de contraintes sur les colonnes...
row key
row
column
col. value
col. name
Exemple
vendredi 6 janvier 12
![Page 10: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/10.jpg)
jgrana
http://www.facebook.com/jerome.granados
nico
@nromanetti
mobile
0612345678
tél. fixe
0495123456
User[[email protected]][mobile] = 0612345678
col. Family row key col. name col. value
User
≃Table en relationnel
Column Family
vendredi 6 janvier 12
![Page 11: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/11.jpg)
Le nom est une valeur
๏ Le nom de la colonne est aussi une valeur!
๏ Les colonnes sont triées par leur nom
๏ Choix de la stratégie de tri (comparator)Long, UTF8, Byte, etc...
XK_4501_2012_01_06: vol Air Corsica AJA -> ORY du 6 janvier 2012 à 06:55
XK_4501_2012_01_06
6:55
décollage face à la mer
7:00
survol Capo di Feno
7:20
survol Cannes etc...
vendredi 6 janvier 12
![Page 12: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/12.jpg)
rowkeyA
wmaker
Liens
date
2011/12/31 10:52
2012/01/01 23:12
rowkeyB
2012/01/06 11:11
rowkeyC etc...
😳
😳😳
‘BlogEntries’
‘BlogEntry’ Content
En cette fin d’année....
Title
Bye bye 2011 etc...
2011/12/31 10:52
rowkeyA
vendredi 6 janvier 12
![Page 13: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/13.jpg)
2012/01/02
Valueless column
093:toto 105:titi 106:tutu etc...
😳
😳😳
‘TopScores’
๏ Le nom de la colonne porte à lui seul l’information
‣ ici: le score suivi du username
๏ Intérêt? performance...
vendredi 6 janvier 12
![Page 14: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/14.jpg)
User[allusers][[email protected]][ville] = Ajaccio
Super Column
๏ Une column contenant des columns
‣ grouper des informations dépendantes
login
jgrana
WM_Jerome
ville
Ajaccio
Supercol. Family
row key supercol. name
sub col. name
subcol. value
vendredi 6 janvier 12
![Page 15: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/15.jpg)
Column avec plusieurs données
contactInfo
tel:04...,email: nr@...,city: Ajaccio,
etc...
vendredi 6 janvier 12
![Page 16: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/16.jpg)
Expiring Column
๏ Une colonne avec un TTL (Time To Live)
vendredi 6 janvier 12
![Page 17: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/17.jpg)
Counter Column
๏ Fonctionnalité récente
๏ Permet d’incrémenter un compteur distribué
vendredi 6 janvier 12
![Page 18: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/18.jpg)
Tombstone
๏ Delete se fait en écrivant une colonne spéciale!
‣ Timestamp fait foi
vendredi 6 janvier 12
![Page 19: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/19.jpg)
2 usages pour les rows
๏ Wide Row: Contient des milliers, millions de colonnes...
‣ données temporelles (timeline twitter, logs, etc...)
๏ Skinny Row: En contient moins
vendredi 6 janvier 12
![Page 20: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/20.jpg)
Requêtes sur les colonnes
๏ Pas de join!
๏ On récupère une ‘Slice’ de column
‣ ex: toutes les colonnes entre ‘n5’ et ‘n2323’
Row Keyn1
qqchose
n2
qqchose
n5
qqchose
n1033
qqchose
n2323
qqchose
n33444
qqchose
Slice
...
Concevoir son modèle de données en fonction des requêtes que l’on veut faire
vendredi 6 janvier 12
![Page 21: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/21.jpg)
Secondary Index
๏ Index sur la valeur d’une colonne
‣ Exemple: index sur la valeur de la column ‘country’
‣ get users where country = 'FR';
FR
@nromanetti
tél. fixe
0495123456
vendredi 6 janvier 12
![Page 22: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/22.jpg)
Révisions :)
๏ column (normale ou super)
๏ wide row, skinny row
๏ column family
๏ requêtes (column slice) / secondary index
๏ valueless column
๏ liens
๏ tombstone
vendredi 6 janvier 12
![Page 23: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/23.jpg)
Réplication
• Pour assurer la disponibilité des données, il faut les répliquer
• ‘Replication Factor’ (RF): nombre de ‘replicas’ (copies)
node* 1 node 2 node 3 node 4 node 5
une donnée
RF = 3
une autre donnée une ‘Replica’* node = serveur
vendredi 6 janvier 12
![Page 24: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/24.jpg)
Répliquer, mais où?
๏ Tous les serveurs sont identiques
๏ Postulats:
‣ 1 row doit tenir sur 1 serveur
‣ On veut répartir les rows uniformément
vendredi 6 janvier 12
![Page 25: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/25.jpg)
tokenB
f(keyB)
f(keyA)
Consistent Hashing
row keyA
Consistent Hash
0
(2^127) / 2 ≃ 10^38
bytese.g. String
row keyB
Un ‘token’ entre0 et 2^127
tokenA
vendredi 6 janvier 12
![Page 26: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/26.jpg)
tokenA
Cassandra Ring
N1
N2
N3
N4
N5
N6
N7
N0
token range
token1=1*(2^127)/8
token2=2*(2^127)/8
node 2 = contient 1ère replica des rows ayant leur token compris entre token1 et token2
tokenB
๏ A chaque noeud on attribut un numéro de token
‣ #token = node number * (2^127) / nb of nodes
vendredi 6 janvier 12
![Page 27: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/27.jpg)
Stratégie de placement
N1
N2
N3
N4
N5
N6
N7
N0tokenB
1ère replica de la row ‘tokenB’
2ème replica...
3ème replica...
tokenA
RF = 3
๏ RandomPartioner: Répartir uniformément les différentes ‘rows’ entre les serveurs
๏ Placement Strategy: par défaut, sur les noeuds suivants
vendredi 6 janvier 12
![Page 28: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/28.jpg)
Ecriture
N1
N2
N3
N4
N5
N6
N7
N0
Client
12
1: le client contacte n’importe quel noeud
2: le noeud contacté (a.k.a. «storage proxy») sert de coordinateur
Note: Le client peut disposer d’une pool de connexions vers quelques noeuds.
Le client ne sait pas où la donnée sera écrite
RF = 3
vendredi 6 janvier 12
![Page 29: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/29.jpg)
Ecriture
๏ Update
‣ On crée!
๏ Delete
‣ Crée la column sous forme de Tombstone
Le timestamp le plus récent fait foi
password
xyz
10000
password
abc
20000
password
30000
createupdate delete
3 columns!
vendredi 6 janvier 12
![Page 30: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/30.jpg)
Ecriture
๏ Comment le client s’assure-t-il que la donnée est effectivement écrite et répliquée?
‣ Attendre une réponse de tous les serveurs impliqués?
‣ Ne pas attendre?
๏ En pratique, cela dépend du use-case
‣ Solution: Tuneable Consistency
vendredi 6 janvier 12
![Page 31: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/31.jpg)
Tuneable Consistency
๏ En écriture, le client indique le Consistency Level désiré
‣ ONE: Je veux être certain qu’au moins une replica a été persistée durablement
‣ QUORUM: Je veux être certain que la majorité des replicas ont été persistées durablement
‣ ALL: Je veux être certain que toutes les replicas ont été persistées durablement
vendredi 6 janvier 12
![Page 32: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/32.jpg)
Consistency Level ONE
N1
N2
N3
N4
N5
N6
N7
N0
Client write
Success
RF = 3
write en asynchrone
vendredi 6 janvier 12
![Page 33: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/33.jpg)
N1
N2
N3
N4
N5
N6
N7
N0
Client
X
RF = 3
Consistency Level ONE
puis, en background...
vendredi 6 janvier 12
![Page 34: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/34.jpg)
Consistency Level QUORUM
N1
N2
N3
N4
N5
N6
N7
N0
Client write
Failure X
RF = 3
vendredi 6 janvier 12
![Page 35: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/35.jpg)
Consistency Level QUORUM
N1
N2
N3
N4
N5
N6
N7
N0
Client write
Success
RF = 3
vendredi 6 janvier 12
![Page 36: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/36.jpg)
Consistency Level ALL
N1
N2
N3
N4
N5
N6
N7
N0
Client write
RF = 3
Failure
X
vendredi 6 janvier 12
![Page 37: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/37.jpg)
Consistency Level ALL
N1
N2
N3
N4
N5
N6
N7
N0
Client write
Success
RF = 3
vendredi 6 janvier 12
![Page 38: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/38.jpg)
Hinted Handoff
๏ Quid du noeud sur lequel nous n’avons pas pu écrire?
๏ Lorsqu’un noeud est indisponible le noeud coordinateur écrit la donnée sur un autre noeud
๏ Cet autre noeud est en charge de rejouer le write une fois que le noeud indisponible revient dans le ring
vendredi 6 janvier 12
![Page 39: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/39.jpg)
Hinted Handoff
N1
N2
N3
N4
N5
N6
N7
N0
Client write
Success
RF = 3CL=QUORUM
hint
vendredi 6 janvier 12
![Page 40: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/40.jpg)
Hinted Handoff
N1
N2
N3
N4
N5
N6
N7
N0
Client
RF = 3CL=QUORUM
Lorsque N3 revient, N4 lui envoie la donnée
write
attention au max_hint_window_in_ms (1h par défaut)
vendredi 6 janvier 12
![Page 41: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/41.jpg)
Gossip
๏ Comment un noeud sait-il qu’un autre noeud revient dans le ring?
๏ Les noeuds échangent des meta-données entre eux sur l’état du ring
๏ Protocole peer to peer
vendredi 6 janvier 12
![Page 42: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/42.jpg)
Gossiping
N1
N2
N3
N4
N5
N6
N7
N0
X
XX
X
๏ Chaque seconde, chaque noeud contacte entre 1et 3 noeuds
‣ Conçu pour éviter la formation d’ilots indépendants
‣ Conçu pour que l’information se propage vite
vendredi 6 janvier 12
![Page 43: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/43.jpg)
Consistency Level ANY
N1
N2
N3
N4
N5
N6
N7
N0
Client write
RF = 3
Success
hint
Intérêt? Performancevendredi 6 janvier 12
![Page 44: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/44.jpg)
Révision / Questions
๏ Consistent Hashing
๏ Token
๏ Replication Factor
๏ Replica placement strategy
๏ Consistency Level
๏ Hinted Handoff
๏ Gossip protocol
vendredi 6 janvier 12
![Page 45: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/45.jpg)
Retour sur Ecriture
Le timestamp le plus récent fait foi
password
xyz
10000
password
abc
20000
password
tralala
30000
createupdate update
3 valeurs pour 1 column
Mais les nodes ont-ils bien la dernière version?
vendredi 6 janvier 12
![Page 46: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/46.jpg)
Noeud down revenant dans le ring
๏ Imaginez un noeud KO pendant une durée > durée de vie d’un hint
‣ Il doit récupérer les données
‣ Node repair (Anti Entropy Repair)
vendredi 6 janvier 12
![Page 47: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/47.jpg)
Lecture
• Comment le client s’assure-t-il que la donnée lue est bien la plus récente?
• Attendre une réponse de tous les serveurs impliqués et comparer?
• Se fier à la première réponse?
• En pratique, cela dépend du use-case
• Solution: Tuneable Consistency
vendredi 6 janvier 12
![Page 48: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/48.jpg)
Tuneable Consistency
๏ En lecture, le client indique le Consistency Level désiré
‣ ONE: je veux la donnée d’une des replicas, je m’en fiche si ce n’est pas la plus récente
‣ QUORUM: je veux la donnée la plus récente parmi une majorité de replicas, je me dis que la majorité aura peut être raison
‣ ALL: je veux la donnée la plus récente parmi toutes les replicas, je serai certain d’avoir la plus récente
vendredi 6 janvier 12
![Page 49: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/49.jpg)
Lecture
N1
N2
N3
N4
N5
N6
N7
N0
Client
12
1: le client contacte n’importe quel noeud
2: le noeud contacté (a.k.a. «storage proxy») sert de coordinateur
Note: Le client peut disposer d’une pool de connexions vers qq noeuds.
Le client ne sait pas où la donnée sera lue
RF = 3
vendredi 6 janvier 12
![Page 50: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/50.jpg)
Consistency Level ONE
N1
N2
N3
N4
N5
N6
N7
N0
Client read
read en asynchrone (md5), puis read repair si besoin et si configuré
digest
digest
OK, mais N1 avait-il la version la plus récente?
read
vendredi 6 janvier 12
![Page 51: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/51.jpg)
Consistency Level ONE
N1
N2
N3
N4
N5
N6
N7
N0
Client read
OK, mais N1 avait-il la version la plus récente?
read
vendredi 6 janvier 12
![Page 52: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/52.jpg)
Consistency Level QUORUM
N1
N2
N3
N4
N5
N6
N7
N0
Clientread
RF = 3 digest
Retourne version la plus récente entre N1 & N2 Mais N3 avait-il une version encore plus récente?
digest
read
vendredi 6 janvier 12
![Page 53: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/53.jpg)
Consistency Level ALL
N1
N2
N3
N4
N5
N6
N7
N0
Client read
RF = 3
KO, même pas besoin d’essayer de lire N1 et N2
vendredi 6 janvier 12
![Page 54: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/54.jpg)
Consistency Level ALL
N1
N2
N3
N4
N5
N6
N7
N0
Client read
OK, retourne version la plus récente
RF = 3 digestrea
d
digest
vendredi 6 janvier 12
![Page 55: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/55.jpg)
Consistance forte
๏ Comment être certain que la donnée lue est la plus récente?
‣ formule W + R > RF W: nb de replica contactées en écriture R: nb de replica contactées en lecture RF: replication factor
๏ Cas trivial
‣ écriture en ALL et lecture en ONE
vendredi 6 janvier 12
![Page 56: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/56.jpg)
Consistency
N1
N2
N3
N4
N5
N6
N7
N0
Write
Read
N1
N2
N3
N4
N5
N6
N7
N0
Write
Read
«Weak» Strong
RF = 3
ONE
QUORUM QUORUM
QUORUM
vendredi 6 janvier 12
![Page 57: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/57.jpg)
En pratique
๏ La réplication fonctionne très bien ( < qq ms )
vendredi 6 janvier 12
![Page 58: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/58.jpg)
Noeud down revenant dans le ring
๏ Imaginons qu’un noeud ait loupé un delete pendant son down time
‣ La donnée non supprimée ne doit pas être prise par le autres noeuds (qui l’ont supprimée) pour une nouvelle donnée!
‣ Grace Period des Tombstone (10j par défaut)
‣ Anti-Entropy Repair (nodetool repair)
vendredi 6 janvier 12
![Page 59: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/59.jpg)
Révision / Questions
๏ Storage proxy
๏ Read repair
๏ Strong consistency: R+W > RF
๏ Update
๏ Tombstone
๏ Anti-Entropy
vendredi 6 janvier 12
![Page 60: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/60.jpg)
Performance en écriture
๏ En écriture, Cassandra est extrêmement rapide, pourquoi?
‣ Ecrit dans le fichier Commit log (append only)
‣ Ecrit en mémoire (MemTable)
‣ Pas d’update...
vendredi 6 janvier 12
![Page 61: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/61.jpg)
Performance en écriture
CommitLog
Fichier
MemTable
Mémoire
MemTableMemTable
MemTable
SSTableSSTableSSTableSSTableSSTableSSTableSSTableSSTableSSTableSSTableSSTable
SSTableSSTableSSTableSSTable
R.O. R.O.
Compaction
Flush
vendredi 6 janvier 12
![Page 62: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/62.jpg)
Compaction
password
xyz
10000
password
abc
20000
password
dada
30000
createupdate update
password
dudu
50000
update
vendredi 6 janvier 12
![Page 63: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/63.jpg)
Performance en lecture
๏ En lecture, Cassandra est quasiment aussi performant
‣ Contact en priorité le noeud le plus «proche» de la donnée
‣ Index pour row key et col. name + Cache
‣ Bloom Filter
vendredi 6 janvier 12
![Page 64: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/64.jpg)
Performance en lecture
Fichiers
Mémoire
MemTableMemTable
MemTable
SSTableSSTableSSTableSSTableSSTableSSTable
BloomFilterBloomFilterBloomFilterBloomFilterBloomFilterBloomFilter
présent dans SSTTable?si présent (faux positif possible)
Cache
vendredi 6 janvier 12
![Page 65: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/65.jpg)
Snitch
๏ Une adresse IP => Un endroit (DataCenter, Rack)
๏ Utile pour répartir les replicas entre les racks, entre les DataCenters
๏ Le ‘dynamic snitch’ prend aussi en compte le temps de réponse des noeuds
vendredi 6 janvier 12
![Page 66: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/66.jpg)
Data Centers / Racks
DC USARack 1
token n+1
token p+1
token r+1
Rack 2
token o+1
token q+1
token s+1
DC EuropeRack 1
token n
token p
token r
Rack 2
token o
token q
token s Replica 4
Replica 3
Replica 1
Replica 2
Replica 1
Replica 2Replica 3
Replica 4
RF = 4
vendredi 6 janvier 12
![Page 67: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/67.jpg)
Tokens forment toujours un ring
token n token n+1
token o
token o+1
token p
token p+1
token qtoken q+1
token s
token s+1
token r
token r+1
USA
Europe
rack1
rack2
rack1
rack2
rack1
rack2
Replica 1
Replica 4
Replica 3
Replica 2
vendredi 6 janvier 12
![Page 68: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/68.jpg)
QUORUM pas toujours adapté
DC USARack 1
token n+1
token p+1
token r+1
Rack 2
token o+1
token q+1
token s+1
DC EuropeRack 1
token n
token p
token r
Rack 2
token o
token q
token s
Client
☹
RF = 6
vendredi 6 janvier 12
![Page 69: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/69.jpg)
LOCAL_QUORUM
DC USARack 1
token n+1
token p+1
token r+1
Rack 2
token o+1
token q+1
token s+1
DC EuropeRack 1
token n
token p
token r
Rack 2
token o
token q
token s
Client
☺
QUORUM sur 1 seul Data Center
vendredi 6 janvier 12
![Page 70: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/70.jpg)
EACH_QUORUM
DC USARack 1
token n+1
token p+1
token r+1
Rack 2
token o+1
token q+1
token s+1
DC EuropeRack 1
token n
token p
token r
Rack 2
token o
token q
token s
Client
☺
QUORUM sur chacun des Data Center
vendredi 6 janvier 12
![Page 71: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/71.jpg)
Sujets non abordés...
๏ Ajouter/Supprimer/Remplacer un noeud
๏ OrderPreserving Partitionner
๏ Major Compaction
๏ Failure detector intégré au Gossip
๏ Tunning / Monitoring
๏ Tools
๏ Client API (Hector, etc.), CQL
๏ etc..
vendredi 6 janvier 12
![Page 72: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/72.jpg)
Questions?
๏ Et peut-être des réponses :)
vendredi 6 janvier 12
![Page 73: Introduction à Cassandra - campus plex](https://reader031.vdocuments.net/reader031/viewer/2022020110/5483142eb47959000d8b49be/html5/thumbnails/73.jpg)
Pour approfondir...
http://www.datastax.com/docs/1.0/index
http://wiki.apache.org/cassandra/
http://ria101.wordpress.com/2010/02/24/hbase-vs-cassandra-why-we-moved/
vendredi 6 janvier 12