web-dev-qa-db-fra.com

Comprendre cassandra par rapport au niveau de cohérence

Je souhaite clarifier le concept de base du facteur de réplication et du niveau de cohérence dans Cassandra. Apprécions grandement si quelqu'un peut fournir une réponse aux questions ci-dessous.

Facteur de réplication RF RC- Cohérence de lecture WC- Cohérence d'écriture

2 cassandra noeuds (Ex: A, B) RF = 1, RC = UN, WC = UN ou TOUS

  • puis-je écrire des données sur le noeud A et lire à partir du noeud B?
  • que se passera-t-il si A tombe?

3 cassandra noeuds (Ex: A, B, C) RF = 2, RC = QUORUM, WC = QUORUM

  • puis-je écrire des données sur le noeud A et lire à partir du noeud C?
  • que se passera-t-il si le noeud A tombe en panne?

3 cassandra noeuds (Ex: A, B, C) RF = 3, RC = QUORUM, WC = QUORUM

  • puis-je écrire des données sur le noeud A et lire à partir du noeud C?
  • que se passera-t-il si le noeud A tombe en panne?
53
Indika Sampath

Résumé succinct: Le facteur de réplication décrit le nombre de copies de vos données existantes. Le niveau de cohérence décrit le comportement observé par le client. Peut-être qu'il y a une meilleure façon de les classer.

Par exemple, vous pouvez avoir un facteur de réplication égal à 2. Lorsque vous écrivez, deux copies sont toujours stockées, en supposant que suffisamment de nœuds soient en place. Lorsqu'un noeud est en panne, les écritures pour ce noeud sont stockées et écrites quand il revient, à moins que cela ne soit assez long pour que Cassandra décide qu'il est parti pour de bon.

Maintenant, disons dans cet exemple que vous écrivez avec un niveau de cohérence de ONE. Le client recevra un accusé de réception après une écriture sur un noeud, sans attendre la seconde écriture. Si vous avez écrit avec un CL de ALL, l'accusé de réception au client attendra que les deux copies soient écrites. Il existe de très nombreuses autres options de niveau de cohérence, trop nombreuses pour couvrir toutes les variantes ici. Lisez le Datastax doc , cependant, cela explique très bien leur travail.

Dans le même exemple, si vous lisez avec un niveau de cohérence égal à ONE, la réponse sera envoyée au client après la réponse d'un seul réplica. Une autre réplique peut contenir des données plus récentes, auquel cas la réponse ne sera pas à jour. Dans de nombreux contextes, cela suffit amplement. Dans d'autres cas, le client aura besoin des informations les plus récentes, et vous utiliserez un niveau de cohérence différent lors de la lecture, par exemple un niveau ALL. De cette manière, la cohérence de Cassandra et des autres bases de données post-relationnelles est ajustable de la même manière que les bases de données relationnelles ne le sont généralement pas.

Revenons maintenant à vos exemples.

Exemple 1: Oui, vous pouvez écrire sur A et lire à partir de B, même si B n’a pas son propre réplica. B le demandera à A au nom de votre client. Ceci est également vrai pour vos autres cas où les nœuds sont tous en place. Quand ils sont tous en place, vous pouvez écrire à l’un et lire à partir d’un autre.

Pour les écritures, avec WC = ONE, si le nœud du réplica unique est actif et correspond à celui auquel vous vous connectez, l'écriture aboutira. Si c'est pour l'autre noeud, l'écriture échouera. Si vous utilisez ANY, l’écriture réussira, si vous parlez au nœud actif. Je pense que vous devez également avoir laissé entendre que le transfert est activé pour cela. Le nœud en panne obtiendra les données plus tard, et vous ne pourrez pas les lire avant que cela ne se produise, pas même à partir du nœud en activité.

Dans les deux autres exemples, le facteur de réplication affectera le nombre de copies éventuellement écrites, mais n'affectera pas le comportement du client au-delà de ce que j'ai décrit ci-dessus. Le QUORUM affectera le comportement du client en ce sens que vous devrez avoir un nombre suffisant de nœuds actifs et répondant aux écritures et aux lectures. Si vous avez de la chance et au moins (nœuds/2) + 1 nœuds sortent des nœuds dont vous avez besoin, les écritures et les lectures aboutissent. Si vous n'avez pas assez de nœuds avec des répliques en place, les lectures et les écritures échoueront. Globalement, certaines lectures et écritures QUORUM peuvent réussir si un nœud est en panne, en supposant que ce nœud ne soit pas nécessaire pour stocker votre réplica ou si sa panne laisse encore suffisamment de nœuds de réplica disponibles.

95
Don Branson

Découvrez cette calculatrice simple qui vous permet de simuler différents scénarios:

http://www.ecyrd.com/cassandracalculator/

Par exemple, avec 2 nœuds, un facteur de réplication de 1, une cohérence en lecture = 1 et une cohérence en écriture = 1:

Your reads are consistent 
You can survive the loss of no nodes. 
You are really reading from 1 node every time. 
You are really writing to 1 node every time. 
Each node holds 50% of your data.
44
bcattle