2016-12-26 1 views
0

je suis tombé sur la ligne ci-dessus dans le blog http://docs.datastax.com/en/archived/cassandra/2.0/cassandra/dml/dml_about_hh_c.htmlSuggéré à Cassandra handoff (Lorsque le cluster ne peut pas atteindre le niveau de cohérence spécifié par le client, Cassandra ne stocke pas un soupçon)

Son assez déroutant. Alors disons que j'ai 5 nœud de cluster, avec RF de 3 et write consistency comme Quorum soit 2 noeuds

Maintenant, si je tente d'écrire quelque chose et hors de trois nœuds de réplique pour particulier donné données, deux étaient en baisse. Donc, cela signifie-t-il que cassandra ne conservera pas d'indice (car il sait qu'il ne sera pas en mesure de répondre à la consistance du quorum en premier lieu)? et rejeter cette écriture tout de suite OU il va stocker l'indice pour eux et donner le succès en réponse?

Quelqu'un peut-il élaborer à ce sujet?

Répondre

0

Il existe deux mécanismes différents ici. Laissez-moi vous donner un exemple pour clarifier.

Supposons que j'ai un groupe de 3 noeuds avec 3 réplication et la cohérence Quorum (2). Cela signifie que lorsque j'écris dans la base de données, je vais devoir obtenir deux réponses pour satisfaire ma requête.

Après avoir satisfait ma requête, le nœud devra envoyer cette écriture au 3ème nœud. Le noeud qui a traité la requête essaie d'envoyer l'écriture au 3ème noeud. Ce noeud est actuellement indisponible, ce qui oblige le noeud à écrire un transfert avec indicateur à la place. Ensuite, il renvoie le succès au client.

Remarque indique que le transfert intercellulaire indique que la cohérence a été atteinte. Le transfert indiqué indique que l'écriture parvient à tous les nœuds qui contiennent une réplique.

Maintenant il ya une exception à cette qui est mentionnée dans l'article que vous avez posté. Niveau de cohérence ANY est un niveau de cohérence qui sera satisfait en écrivant un transfert avec indicateur tant qu'il existe un nœud pouvant servir la requête.

1

Si vous avez un RF = 3 et que 2 nœuds sont hors service ou incapables de traiter la demande en temps opportun, la demande d'écriture échouera et le transfert avec indicateur ne sera pas stocké. Les transferts avec indication ne seront stockés que si le niveau de cohérence (CL) de la demande peut être atteint et que vous êtes dans la fenêtre de transmission avec indication. La seule exception à cela serait une demande écrite avec un CL = ANY.

+0

Si un nœud n'est pas en mesure de traiter la demande en temps opportun, alors selon la documentation, il va stocker des conseils. Vous avez dit que ça ne va pas, pourquoi? –

+0

Les indicateurs ne seront stockés que si la demande d'écriture est capable de satisfaire le niveau de cohérence spécifié (CL = QUORUM) dans votre cas. Si <2 nœuds réussissent à écrire la requête, la requête échouera et aucun indice ne sera stocké. Si 2 nœuds sont capables de satisfaire l'écriture, l'indice sera stocké pour le 3ème nœud. Si les 3 réplicas sont capables d'écrire, aucun indice ne sera stocké. Espérons que cela aide. – bechbd

+0

Donc, chaque fois que j'obtiens ** une exception de timeout ** en écrivant. Cela signifie qu'il n'a pas pu atteindre mon niveau de cohérence et dans ce cas, les indices ne seront pas stockés. Est-ce? –