Consistency Level (suite)
Exemple : Lecture dans un Cluster
Ici, nous avons un RF de 3, et CL de ALL.
Lorsque client fait une lecture, tous les nœuds contenant la donnée doivent donc retourner une réponse.
Cependant, les données sont ici différentes, dans ce cas on récupère la donnée qui a été ajoutée le plus récemment en utilisant le timestamp.
Les noeuds ayant 4 pour valeur de "credits" ne vont pas tarder à avoir la valeur 6. La mise à jour n'a pas encore été effective.
Exemple : Pourquoi des données différentes ?
Soit :
-Un cluster de 10 nœuds notés N1 ... N10 et un KEYSPACE nommé propaga.
-Un RF pour ce KEYSPACE fixé à 4 et un CL fixé à ALL.
-Cinq clients notés C1 ... C5 exécutant des requêtes sur le cluster.
Imaginons qu'une donnée D1 soit contenue dans les nœuds N1, N2, N3 et N4.
Le client C1 se connecte au nœud N1 et modifie D1 à un instant t0, D1 devient alors D1'.
N1 veut alors propager la nouvelle valeur aux autres nœuds (N2, N3 et N4) et le temps moyen pour cela est :
-1 seconde de N1 vers N2 noté p2
-2 secondes de N1 vers N3 noté p3
-3 secondes de N1 vers N4 noté p4
A l'instant t1 = t0 + 1.5 secondes, le client C2 se connecte au nœud N4 et demande la donnée D1.
Tous les nœuds doivent répondre et donc retournent leur valeur.
Or :
t0 + p2 < t1
t0 + p3 > t1
t0 + p4 >t1
Les nœuds N1 et N2 renverront donc la valeur D1' et les nœuds N3 et N4 la valeur D1.
Si le CL était fixé à QUORUM, et que N4 demandait la valeur de N3, alors les 2 valeurs retournées auraient été D1 et non D1', le client C2 aurait donc eu une information erronée dans ce cas.