una relacional que datos nosql computer-science data-storage eventual-consistency

nosql - relacional - cap base de datos



Consistencia eventual en inglés simple (6)

Consistencia eventual:

  1. Miro el informe del clima y me doy cuenta de que va a llover mañana.
  2. Te digo que va a llover mañana.
  3. Su vecino le dice a su esposa que va a estar soleado mañana.
  4. Le dices a tu vecino que va a llover mañana.

Eventualmente, todos los servidores (tú, yo, tu vecino) saben la verdad (que va a llover mañana), pero mientras tanto, el cliente (su esposa) salió pensando que va a hacer sol, aunque ella preguntó después de uno o más de los servidores (usted y yo) tenía un valor más actualizado.

A diferencia del cumplimiento estricto de la consistencia / ACID:

  1. Su saldo bancario es de $ 50.
  2. Usted deposita $ 100.
  3. Su saldo bancario, consultado desde cualquier cajero automático en cualquier lugar, es de $ 150.
  4. Su hija retira $ 40 con su tarjeta de cajero automático.
  5. Su saldo bancario, consultado desde cualquier cajero automático en cualquier lugar, es de $ 110.

En ningún momento puede su saldo reflejar nada más que la suma real de todas las transacciones realizadas en su cuenta en ese momento exacto.

La razón por la cual tantos sistemas NoSQL tienen una coherencia final es que prácticamente todos están diseñados para ser distribuidos, y con sistemas totalmente distribuidos hay una sobrecarga lineal para mantener una coherencia estricta (lo que significa que solo puede escalar hasta que las cosas empiecen a ralentizarse). hacia abajo, y cuando lo hacen, debe lanzar exponencialmente más hardware al problema para seguir escalando).

A menudo escucho sobre la eventual consistencia en diferentes discursos sobre NoSQL, grillas de datos, etc. Parece que la definición de consistencia eventual varía en muchas fuentes (y tal vez incluso dependa de un almacenamiento de datos concreto).

¿Alguien puede dar una explicación simple de lo que es la consistencia eventual en términos generales, no relacionada con ningún almacenamiento de datos concreto?


Consistencia eventual:

  1. Sus datos se replican en varios servidores
  2. Sus clientes pueden acceder a cualquiera de los servidores para recuperar los datos
  3. Alguien escribe una información en uno de los servidores, pero todavía no se ha copiado al resto
  4. Un cliente accede al servidor con los datos y obtiene la copia más actualizada
  5. Un cliente diferente (o incluso el mismo cliente) accede a un servidor diferente (uno que aún no recibió la copia nueva) y obtiene la copia anterior

Básicamente, dado que lleva tiempo replicar los datos en varios servidores, las solicitudes para leer los datos pueden ir a un servidor con una copia nueva y luego ir a un servidor con una copia anterior. El término "eventual" significa que, finalmente, los datos se replicarán en todos los servidores y, por lo tanto, todos tendrán la copia actualizada.

La consistencia eventual es imprescindible si desea lecturas de baja latencia, ya que el servidor que responde debe devolver su propia copia de los datos, y no tiene tiempo para consultar otros servidores y llegar a un acuerdo mutuo sobre el contenido de los datos. Escribí una publicación en el blog explicando esto con más detalle.


Cuando una aplicación realiza un cambio en un elemento de datos en una máquina, ese cambio debe propagarse a las otras réplicas. Como la propagación del cambio no es instantánea, hay un intervalo de tiempo durante el cual algunas de las copias tendrán el cambio más reciente, pero otras no. En otras palabras, las copias serán mutuamente inconsistentes. Sin embargo, el cambio eventualmente se propagará a todas las copias, y de ahí el término "consistencia eventual". El término consistencia final es simplemente un reconocimiento de que hay un retraso sin límites en la propagación de un cambio realizado en una máquina a todas las demás copias. La consistencia eventual no es significativa o relevante en sistemas centralizados (copia única) ya que no hay necesidad de propagación.

fuente: http://www.oracle.com/technetwork/products/nosqldb/documentation/consistency-explained-1659908.pdf


La consistencia eventual es más como un espectro. En un extremo tienes consistencia fuerte y en otro tienes consistencia eventual. En el medio hay niveles como Snapshot, leer mis escritos, estancamiento limitado. Doug Terry tiene una hermosa explicación en su artículo sobre la consistencia eventual a través del béisbol .

Según mi opinión, la consistencia eventual es básicamente la tolerancia a los datos aleatorios en orden aleatorio cada vez que lee en un almacén de datos. Cualquier cosa mejor que eso es un modelo de consistencia más fuerte. Por ejemplo, una instantánea tiene datos obsoletos, pero devolverá los mismos datos si se vuelve a leer, por lo que es predecible. A veces, la aplicación puede tolerar datos que están obsoletos durante un período de tiempo determinado, más allá del cual exige datos coherentes.

Si observa el significado de consistencia, se relaciona más con la uniformidad o la falta de desviación. Entonces, en términos de sistemas no informáticos, podría significar tolerancia para variaciones inesperadas. Podría ser muy bien explicado a través de cajero automático. Un cajero automático podría estar fuera de línea, por lo tanto, divergente del saldo de la cuenta de los sistemas centrales. Sin embargo, hay una tolerancia para mostrar saldos diferentes para un intervalo de tiempo. Una vez que el cajero automático se conecta, se puede sincronizar con los sistemas centrales y reflejar el mismo equilibrio. Por lo tanto, podría decirse que un cajero automático sería consecuente.


Piensa que tienes una aplicación y su réplica. Luego debe agregar un nuevo elemento de datos a la aplicación.

A continuación, la aplicación sincroniza los datos con otro espectáculo de réplica en la parte inferior

Mientras tanto, el nuevo cliente va a obtener datos de una réplica que aún no se actualiza. En ese caso, él no puede obtener datos actualizados de la fecha. Porque la sincronización consigue algo de tiempo. En ese caso, no tiene consistencia en el futuro

El problema es cómo podemos eventualmente consistencia ?

Para eso usamos la aplicación de mediador para actualizar / crear / borrar datos y usar consulta directa para leer datos. que ayuda a hacer finalmente la consistencia


en una frase en inglés muy simple podemos decir: aunque su sistema puede estar en estados inconsistentes, el objetivo siempre es alcanzar consistencia en algún punto para cada dato.