Para operaciones de lectura no asociadas con transacciones multi-documento, el nivel de consistencia de lectura "majority" garantiza que los datos leídos hayan sido reconocidos por la mayoría de los miembros del set de réplicas. Los documentos leídos son duraderos y está garantizado que no se revertirán.
Para operaciones en transacciones multidocumento, el nivel de consistencia de lectura "majority" proporciona sus garantías solo si la transacción se confirma con nivel de confirmación de escritura (write concern) "mayoría". De lo contrario, el nivel de consistencia de lectura "majority" no proporciona garantías sobre los datos leídos en transacciones.
Independientemente del nivel de consistencia de lectura, es posible que los datos más recientes de un nodo no reflejen la versión más reciente de los datos en el sistema.
Para obtener más información sobre lo que sucede si falla un primario, consulta Failover Automático.
Rendimiento
Cada miembro de un conjunto de réplicas mantiene, en memoria, una vista de los datos en el punto de compromiso mayoritario; el punto de compromiso mayoritario lo calcula el primario. Para satisfacer el nivel de consistencia de lectura "majority", el nodo devuelve datos de esta vista y es comparable en rendimiento con otros niveles de consistencia de lectura.
latencia
El nivel de consistencia de lectura "majority" no disminuye el rendimiento de las consultas; solo modifica lo que retorna al cliente. El nivel de consistencia de lectura "majority" permite que solo los datos almacenados de manera duradera en la mayoría de los nodos del set de réplicas se devuelvan al cliente. En comparación, las consultas con el nivel de consistencia de lectura "local" pueden devolver datos que pueden perderse en ciertos escenarios, como un rollback.
Disponibilidad
Nivel de consistencia de lectura "majority" está disponible para su uso con o sin sesiones y transacciones causalmente consistentes.
Advertencia
Si está utilizando una arquitectura de tres nodos de primario-secundario-árbitro (PSA), considere lo siguiente:
El nivel de confirmación de escritura
"majority"puede causar problemas de rendimiento si un secundario no está disponible o está retrasado. Para obtener consejos sobre cómo mitigar estos problemas, consulta Mitigar problemas de rendimiento con un set de réplicas de PSA autogestionado.Si está utilizando un
"majority"por defecto global y el nivel de confirmación de escritura (write concern) es menor que el tamaño de la mayoría, sus consultas pueden devolver datos obsoletos (no completamente replicados).
Ejemplo
Considera la siguiente cronología de una operación de escritura. Escribe 0 en un set de réplicas de tres nodos:
Nota
Para simplificar, el ejemplo asume:
Todas las operaciones de guardar anteriores a Write 0 se han replicado correctamente en todos los nodos.
Write prev es la guardar anterior a Write 0.
No se han producido otras escrituras después de Write 0.
Tiempo | Evento | Último guardar | Más reciente w: "mayoría" guardar |
|---|---|---|---|
t 0 | El primario aplica guardar 0 | Primary: Write 0 Secondary 1: Write prev Secondary 2: Write prev | Primary: Write prev Secondary 1: Write prev Secondary 2: Write prev |
t 1 | Secundario 1 aplica guardar 0 | Primary: Write 0 Secondary 1: Write 0 Secondary 2: Write prev | Primary: Write prev Secondary 1: Write prev Secondary 2: Write prev |
t 2 | Secundaria 2 aplica guardar 0 | Primary: Write 0 Secondary 1: Write 0 Secondary 2: Write 0 | Primary: Write prev Secondary 1: Write prev Secondary 2: Write prev |
t 3 | Principal está al tanto de la replicación exitosa a Secundario 1 y envía acuse de recibo al cliente | Primary: Write 0 Secondary 1: Write 0 Secondary 2: Write 0 | Primary: Write 0 Secondary 1: Write prev Secondary 2: Write prev |
t 4 | El primario está consciente de la replicación exitosa en el secundario 2 | Primary: Write 0 Secondary 1: Write 0 Secondary 2: Write 0 | Primary: Write 0 Secondary 1: Write prev Secondary 2: Write prev |
t 5 | El Secundario 1 recibe la notificación (a través del mecanismo regular de replicación) para actualizar su snapshot de su última w: guardar de "mayoría" | Primary: Write 0 Secondary 1: Write 0 Secondary 2: Write 0 | Primary: Write 0 Secondary 1: Write 0 Secondary 2: Write prev |
t 6 | El secundario 2 recibe un aviso (a través del mecanismo regular de replicación) para actualizar su snapshot de su escritura más reciente de "mayoría" | Primary: Write 0 Secondary 1: Write 0 Secondary 2: Write 0 | Primary: Write 0 Secondary 1: Write 0 Secondary 2: Write 0 |
Luego, la siguiente tabla resume el estado de los datos que una operación de lectura con "majority" nivel de consistencia de lectura vería en el momento T.
Leer destino | Tiempo T | Estado de los datos |
|---|---|---|
Primario | Antes de t 3 | Los datos reflejan guardar prev |
Primario | Después de t 3 | Los datos reflejan guardar 0 |
Secundaria 1 | Antes de t 5 | Los datos reflejan guardar prev |
Secundaria 1 | Luego de t 5 | Los datos reflejan guardar 0 |
Secundario 2 | Antes o en t 6 | Los datos reflejan guardar prev |
Secundario 2 | Después de t 6 | Los datos reflejan guardar 0 |
Soporte para el motor de almacenamiento
Nivel de consistencia de lectura "majority" está disponible para el motor de almacenamiento WiredTiger.
Tip
El comando serverStatus retorna el campo storageEngine.supportsCommittedReads, que indica si el motor de almacenamiento soporta el nivel de consistencia de lectura "majority".
nivel de consistencia de lectura "majority" y transacciones
Nota
Estableces el nivel de consistencia de lectura a nivel de transacción, no a nivel de operación individual. Para establecer el nivel de consistencia de lectura para las transacciones, consulte Transacciones y nivel de consistencia de lectura.
Para operaciones en transacciones multidocumento, el nivel de consistencia de lectura "majority" proporciona sus garantías solo si la transacción se confirma con nivel de confirmación de escritura (write concern) "mayoría". De lo contrario, el nivel de consistencia de lectura "majority" no proporciona garantías sobre los datos leídos en transacciones.
Nivel de consistencia de lectura "majority" y agregación
Puede especificar el nivel de consistencia de lectura "majority" para una agregación que incluya una etapa $out.
Lee tus propios guardados
Se pueden utilizar sesiones con coherencia causal para leer tus propias escrituras, si las escrituras solicitan reconocimiento.
Sets de réplicas primario-secundario-árbitro
A partir de MongoDB 5.0, enableMajorityReadConcern y --enableMajorityReadConcern no se pueden cambiar y siempre se establecen en true debido a mejoras en el motor de almacenamiento.
En versiones anteriores de MongoDB, enableMajorityReadConcern y --enableMajorityReadConcern son configurables y se pueden establecer en false para evitar que la presión sobre la caché de almacenamiento inmovilice una implementación con una arquitectura de primario-secundario-árbitro (PSA) de tres miembros.
Si está utilizando una arquitectura de tres nodos de primario-secundario-árbitro (PSA), considere lo siguiente:
El nivel de confirmación de escritura
"majority"puede causar problemas de rendimiento si un secundario no está disponible o está retrasado. Para obtener consejos sobre cómo mitigar estos problemas, consulta Mitigar problemas de rendimiento con un set de réplicas de PSA autogestionado.Si está utilizando un
"majority"por defecto global y el nivel de confirmación de escritura (write concern) es menor que el tamaño de la mayoría, sus consultas pueden devolver datos obsoletos (no completamente replicados).