¿Dónde está mongodb en el teorema de la TAPA?


Dondequiera que mire, veo que MongoDB es CP. Pero cuando cavo veo que finalmente es consistente. ¿Es CP cuando se utiliza safe = true? Si es así, ¿significa eso que cuando escribo con safe = true, todas las réplicas se actualizarán antes de obtener el resultado?

Author: Community, 2012-07-02

6 answers

MongoDB es fuertemente consistente por defecto - si haces una escritura y luego haces una lectura, asumiendo que la escritura fue exitosa siempre serás capaz de leer el resultado de la escritura que acabas de leer. Esto se debe a que MongoDB es un sistema de un solo maestro y todas las lecturas van al primario por defecto. Si opcionalmente habilita la lectura de las secundarias, entonces MongoDB se vuelve eventualmente consistente donde es posible leer resultados desactualizados.

MongoDB también obtiene alta disponibilidad a través de conmutación por error automática en conjuntos de réplicas: http://www.mongodb.org/display/DOCS/Replica + Conjuntos

 81
Author: stbrody,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-02 16:33:11

Esto debería ayudar a responder la pregunta, junto con otros NoSQL y otros sistemas de almacenamiento persistente.

introduzca la descripción de la imagen aquí

 103
Author: Timothy Perez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-16 05:21:44

Estoy de acuerdo con Luccas post. No se puede decir que MongoDB es CP/AP/CA, porque en realidad es una compensación entre C, A y P, dependiendo de la configuración de la base de datos/controlador y el tipo de desastre: aquí hay un resumen visual, y debajo una explicación más detallada.

    Scenario                   | Main Focus | Description
    ---------------------------|------------|------------------------------------
    No partition               |     CA     | The system is available 
                               |            | and provides strong consistency
    ---------------------------|------------|------------------------------------
    partition,                 |     AP     | Not synchronized writes 
    majority connected         |            | from the old primary are ignored                
    ---------------------------|------------|------------------------------------
    partition,                 |     CP     | only read access is provided
    majority not connected     |            | to avoid separated and inconsistent systems

Consistencia:

MongoDB es muy consistente cuando se utiliza una sola conexión o la escritura correcta/Leer Nivel de Preocupación (Lo que le costará velocidad de ejecución ). Como tan pronto como usted no cumple con esas condiciones (especialmente cuando está leyendo de una réplica secundaria) MongoDB se vuelve Eventualmente Consistente.

Disponibilidad:

MongoDB obtiene alta disponibilidad a través de Replica-Sets . Tan pronto como la primaria caiga o no esté disponible, las secundarias determinarán que una nueva primaria vuelva a estar disponible. Hay una desventaja en esto: Cada escritura que fue realizada por el antiguo primario, pero no sincronizada con el los secundarios se revertirán y se guardarán en un archivo de reversión, tan pronto como se vuelva a conectar al conjunto(el antiguo primario ahora es secundario). Así que en este caso se sacrifica cierta consistencia en aras de la disponibilidad.

Tolerancia de partición:

A través del uso de dichos Conjuntos de Réplicas MongoDB también logra la tolerancia de partición: Mientras más de la mitad de los servidores de un Conjunto de Réplicas estén conectados entre sí, se puede elegir un nuevo primario. ¿Por qué? Para asegurar dos las redes separadas no pueden elegir una nueva primaria. Cuando no hay suficientes secundarios conectados entre sí, aún puede leer de ellos (pero no se garantiza la consistencia), pero no escribir. El conjunto prácticamente no está disponible en aras de la consistencia.

 21
Author: JoCa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-14 12:10:54

Como un brillante nuevo artículo apareció y también algunos impresionantes experimentos de Kyle en este campo, debe tener cuidado al etiquetar MongoDB, y otras bases de datos, como C o A.

Por supuesto, CAP ayuda a rastrear sin muchas palabras lo que prevalece sobre la base de datos, pero la gente a menudo olvida que C en CAP significa consistencia atómica (linealización), por ejemplo. Y esto me causó mucho dolor para entender al tratar de clasificar. Así, además de MongoDB dar fuerte consistencia, eso no quiere decir que sea C. De esta manera, si uno hace estas clasificaciones, recomendé también dar más profundidad en cómo funciona realmente para no dejar dudas.

 16
Author: Luccas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-15 00:28:10

Sí, es CP cuando se usa safe=true. Esto simplemente significa que los datos llegaron al disco maestro. Si desea asegurarse de que también llegó a alguna réplica, busque en el parámetro' w=N ' donde N es el número de réplicas en las que se deben guardar los datos.

Ver thisy this para más información.

 10
Author: Jan Prieser,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-02 22:34:51

No estoy seguro acerca de P para Mongo. Imagine la situación:

  • Su réplica se divide en dos particiones.
  • Escribe continuar a ambos lados como nuevos maestros fueron elegidos
  • Se ha resuelto la partición-ahora todos los servidores están conectados de nuevo
  • Lo que sucede es que se elige un nuevo maestro, el que tiene el oplog más alto, pero los datos del otro maestro se revierten al estado común antes de la partición y se vierten en un archivo para la recuperación manual
  • todos los secundarios se ponen al día con el nuevo maestro

El problema aquí es que el tamaño del archivo de volcado es limitado y si tuvo una partición durante mucho tiempo puede perder sus datos para siempre.

Se puede decir que es poco probable que suceda - sí, a menos que en la nube donde es más común de lo que uno puede pensar.

Este ejemplo es por lo que sería muy cuidadoso antes de asignar cualquier letra a cualquier base de datos. Hay tantos escenarios e implementaciones que no son perfectas.

Si alguien sabe si este escenario ha sido abordado en versiones posteriores de Mongo por favor, comente! (No he estado siguiendo todo lo que estaba pasando por algún tiempo..)

 5
Author: kubal5003,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-10 10:16:39