Estoy de acuerdo con la publicación de Luccas. No puede simplemente 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 de un 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 usa una sola conexión o el nivel de preocupación de escritura / lectura correcto (lo que le costará velocidad de ejecución ). Tan pronto como no cumpla con esas condiciones (especialmente cuando está leyendo desde 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 deje de funcionar o deje de estar disponible, las secundarias determinarán una nueva primaria para que vuelva a estar disponible. Esto tiene una desventaja: todas las escrituras realizadas por el antiguo primario, pero no sincronizadas con los secundarios, se revertirán y se guardará en un archivo de reversión, tan pronto como se vuelva a conectar al conjunto (el antiguo primario es secundario ahora). Entonces, en este caso, se sacrifica cierta consistencia en aras de la disponibilidad.
Tolerancia de partición:
Mediante el uso de dichos conjuntos de réplicas, MongoDB también logra la tolerancia de partición: siempre que 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 garantizar que dos redes separadas no puedan ambas elegir una nueva primaria. Cuando no hay suficientes secundarios conectados entre sí, aún puede leerlos (pero no se garantiza la coherencia), pero no escribir. El conjunto prácticamente no está disponible por motivos de coherencia.