Cohérence, ce n'est pas vraiment "je vois les mêmes données partout", mais "si je fait une requête sur les mêmes données sur n'importe quel nœuds, au final je récupère les mêmes données (ou rien du tout si le nœuds est indisponible)". Sachant que si un nœud ne possède pas la donnée, il à bien entendu le droit de le demander à ses voisins… S'il peut les joindre.
Bien sûr, ça se démontre, mais c'est quand même assez naturel comme théorème. Prenons un cas simple : deux nœuds qui partagent la même information.
Le lien entre les deux tombe (donc le système se retrouve morcelé). On demande à un des nœuds de modifier une donnée.
1. Si il accepte la modification, alors la cohérence n'est pas vérifiée (si on demande aux deux nœud la valeur de la donnée, ils ne répondront pas la même chose). Mais il reste disponible et il tolère le partitionnement.
2. Si il refuse la modification, alors la disponibilité n'est pas vérifiée. Mais il reste cohérent et tolère le partitionnement.
3. Si le système accepte la modification mais renvoie l'ancienne donnée, ou de manière générale, se comporte autrement que dans le 1) ou le 2), alors il ne marche pas. S'il marchait très bien avant que le lien tombe, alors il ne tolère pas le morcellement. Mais sinon, il reste cohérent et disponible quand il n'est pas morcelé.
[^] # Re: Théorème CAP
Posté par Batchyx . En réponse à la dépêche Petit état des lieux du NoSQL. Évalué à 6.
Cohérence, ce n'est pas vraiment "je vois les mêmes données partout", mais "si je fait une requête sur les mêmes données sur n'importe quel nœuds, au final je récupère les mêmes données (ou rien du tout si le nœuds est indisponible)". Sachant que si un nœud ne possède pas la donnée, il à bien entendu le droit de le demander à ses voisins… S'il peut les joindre.
Bien sûr, ça se démontre, mais c'est quand même assez naturel comme théorème. Prenons un cas simple : deux nœuds qui partagent la même information.
Le lien entre les deux tombe (donc le système se retrouve morcelé). On demande à un des nœuds de modifier une donnée.
1. Si il accepte la modification, alors la cohérence n'est pas vérifiée (si on demande aux deux nœud la valeur de la donnée, ils ne répondront pas la même chose). Mais il reste disponible et il tolère le partitionnement.
2. Si il refuse la modification, alors la disponibilité n'est pas vérifiée. Mais il reste cohérent et tolère le partitionnement.
3. Si le système accepte la modification mais renvoie l'ancienne donnée, ou de manière générale, se comporte autrement que dans le 1) ou le 2), alors il ne marche pas. S'il marchait très bien avant que le lien tombe, alors il ne tolère pas le morcellement. Mais sinon, il reste cohérent et disponible quand il n'est pas morcelé.