J'entends souvent parler de cohérence éventuelle dans les différents discours sur NoSQL, les grilles de données, etc. Il semble que la définition de la cohérence finale varie dans de nombreuses sources (et peut-être même dépend d'un stockage de données concret).
Quelqu'un peut-il donner une explication simple de ce qu'est la cohérence éventuelle en termes généraux, sans lien avec un stockage de données concret?
Consistance éventuelle:
Finalement, tous les serveurs (vous, moi, votre voisin) savent la vérité (il pleuvra demain), mais entre-temps, le client (sa femme) est parti en pensant qu'il allait faire beau, même si elle l'a demandé. après qu'un ou plusieurs des serveurs (vous et moi) aient eu une valeur plus à jour.
Contrairement à la stricte cohérence/conformité ACID:
Votre solde ne peut à aucun moment refléter autre chose que la somme réelle de toutes les transactions effectuées sur votre compte à ce moment précis.
La raison raison pour laquelle de nombreux systèmes NoSQL ont éventuellement une cohérence est que la quasi-totalité d'entre eux sont conçus pour être distribués, et avec les systèmes entièrement distribués, il existe une surcharge super-linéaire pour le maintien d'une cohérence stricte ne peut évoluer que jusqu’à présent, avant que les choses ne commencent à ralentir, et quand cela est nécessaire, vous devez utiliser de manière exponentielle plus de matériel pour résoudre le problème.
Consistance éventuelle:
En principe, comme la réplication des données sur plusieurs serveurs prend du temps, les demandes de lecture des données peuvent être adressées à un serveur avec une nouvelle copie, puis à un serveur avec une ancienne copie. Le terme "éventuel" signifie que les données seront éventuellement répliquées sur tous les serveurs et qu’ils auront donc tous la copie à jour.
La cohérence éventuelle est indispensable si vous souhaitez des lectures à faible temps de latence, car le serveur qui répond doit renvoyer sa propre copie des données et n'a pas le temps de consulter d'autres serveurs et de se mettre d'accord sur le contenu des données. J'ai écrit un blog post expliquant cela plus en détail.
Pensez que vous avez une application et sa réplique. Ensuite, vous devez ajouter un nouvel élément de données à l'application.
Ensuite, l'application synchronise les données sur les autres répliques présentées ci-dessous.
Pendant ce temps, le nouveau client va récupérer les données d’un réplica qui n’a pas encore été mis à jour. Dans ce cas, il ne peut pas obtenir de données de date correctes. Parce que la synchronisation prend du temps. Dans ce cas, il n'a pas éventuellement de cohérence
Le problème est comment pouvons-nous éventuellement la cohérence?
Pour cela, nous utilisons une application médiateur pour mettre à jour/créer/supprimer des données et utilisons une interrogation directe pour lire des données. cette aide pour rendre finalement cohérence
Lorsqu'une application modifie un élément de données sur un ordinateur, cette modification doit être propagée aux autres réplicas. Comme la propagation des modifications n’est pas instantanée, il existe un intervalle de temps pendant lequel certaines des copies auront les modifications les plus récentes, mais d’autres pas. En d'autres termes, les copies seront incohérentes. Cependant, le changement finira par se propager à toutes les copies, d'où le terme «cohérence éventuelle». Le terme cohérence éventuelle est simplement un accusé de réception d'un délai sans limite dans la propagation d'une modification effectuée sur une machine à toutes les autres copies. La cohérence éventuelle n’est ni significative ni pertinente dans les systèmes centralisés (copie unique), car la propagation n’est pas nécessaire.
source: http://www.Oracle.com/technetwork/products/nosqldb/documentation/consistency-explained-1659908.pdf
En anglais simple, nous pouvons dire: Bien que votre système puisse être dans des états incohérents, le but est toujours de parvenir à la cohérence à un moment donné pour chaque donnée.
La cohérence éventuelle ressemble plus à un spectre. D'un côté, vous avez une consistance forte et de l'autre, vous avez une consistance éventuelle. Entre les deux, il y a des niveaux tels que Snapshot, lisez mes écrits, la stalness bornée. Doug Terry a une belle explication dans son article sur la cohérence éventuelle du baseball .
Selon moi, la cohérence éventuelle consiste essentiellement à tolérer des données aléatoires dans un ordre aléatoire chaque fois que vous lisez dans un magasin de données. Quelque chose de meilleur que cela est un modèle de cohérence plus fort. Par exemple, une capture instantanée contient des données obsolètes, mais renverra les mêmes données si elles sont relues afin qu'elles soient prévisibles. Parfois, l’application peut tolérer des données périmées pendant une période donnée, au-delà desquelles des données cohérentes sont exigées.
Si vous examinez le sens de la cohérence, cela concerne davantage l'uniformité ou l'absence de déviation. Donc, en termes non informatiques, cela pourrait signifier une tolérance pour des variations inattendues. Cela pourrait être très bien expliqué par ATM. Un guichet automatique peut être hors ligne, ce qui divergent du solde des comptes des systèmes centraux. Cependant, il existe une tolérance à l'affichage de différents équilibres pour une fenêtre temporelle. Une fois que le guichet automatique est en ligne, il peut se synchroniser avec les systèmes principaux et refléter le même équilibre. Ainsi, un guichet automatique pourrait être considéré comme cohérent.
Finalement, la cohérence signifie que les modifications prennent du temps à se propager et que les données peuvent ne pas être dans le même état après chaque action, même pour des actions ou des transformations identiques des données. Cela peut entraîner de très mauvaises choses lorsque les gens ne savent pas ce qu’ils font.
EX: Développeurs et même architectes qui ne connaissent ni ne comprennent la technologie et craignent de l'admettre de peur de perdre leur emploi, mais qui ont suivi une formation classique en SGBDR et qui ne connaissent que les systèmes ACID (en quoi différentes peuvent-elles être?) Ne connaissez pas la technologie et ne prenez pas le temps de l’apprendre, il vous faudra concevoir un magasin de données de documents. Ils peuvent également essayer de l’utiliser en tant que SGBDR ou pour des tâches telles que la mise en cache. Ils décomposeront ce qui devrait être des transactions atomiques qui devraient opérer sur un document entier en éléments «relationnels», en oubliant que réplication et latence sont des choses, ou pire encore, entraînant des systèmes tiers dans une «transaction». Ils le feront pour que leur SGBDR puisse refléter leur base de données, qu’il fonctionne ou non, et sans test, car ils savent ce qu’ils font. Ils agiront ensuite avec surprise lorsque des objets complexes stockés dans des documents distincts, tels que des «ordres», contiennent moins d’exemplaires que prévu, voire aucun. Mais cela ne se produira pas souvent ou assez souvent pour qu’ils avancent. Ils ne peuvent même pas frapper le problème en développement. Ensuite, plutôt que de repenser les choses, ils ajouteront des «retards», des «tentatives» et des «vérifications» pour simuler un modèle de données relationnel, qui ne fonctionnera pas, mais qui ajoutera une complexité supplémentaire sans aucun avantage. Mais il est trop tard maintenant - la chose a été déployée et l’entreprise fonctionne maintenant. Finalement, tout le système sera jeté, le département sera externalisé et quelqu'un d'autre le maintiendra. Cela ne fonctionnera toujours pas correctement, mais ils peuvent échouer à moindre coût que l’échec actuel.
En bref, si vous devez demander, vous devez apprendre beaucoup. Veuillez ne rien mettre en oeuvre avant de le faire. Il est beaucoup plus difficile de réparer l'implémentation d'un magasin de données de documents qu'un modèle relationnel, car les problèmes fondamentaux qui vont être gâchés ne peuvent tout simplement pas être résolus, car les éléments nécessaires pour les réparer ne sont tout simplement pas présents dans l'écosystème. La refactorisation des données d'un magasin de données en vol est également beaucoup plus difficile que les simples transformations etl d'un SGBDR.
Tous les magasins de documents ne sont pas créés égaux. Certains de ces jours (MongoDB) prennent en charge les transactions d'un type, mais la migration des magasins de données est probablement comparable aux frais de réimplémentation.