Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Coherencia causal y nivel de confirmación de escritura (write concern)

Con MongoDB's sesiones de cliente causalmente consistentes, diferentes combinaciones de requisitos de lectura y nivel de confirmación de escritura (write concern) ofrecen diferentes garantías de consistencia causal.

La siguiente tabla enumera las garantías específicas que ofrecen las distintas combinaciones:

readConcern
Nivel de confirmación de escritura
Reads propios de guardar
Lecturas monotónicas
Escrituras monotónicas
Las escrituras siguen a las lecturas

Si se busca consistencia causal con durabilidad de datos, como se muestra en la tabla, solo las operaciones de lectura con de "majority" interés de lectura y las operaciones de escritura con de interés de escritura pueden garantizar las "majority" cuatro garantías de consistencia causal. Es decir, las sesiones de cliente causalmente consistentes solo pueden garantizar la consistencia causal para:

  • Operaciones de lectura con "majority" nivel de consistencia de lectura; en otras palabras, las operaciones de lectura que devuelven datos que han sido confirmados por la mayoría de los miembros del conjunto de réplicas y son duraderas.

  • Las operaciones de escritura con "majority" connotación se refieren a operaciones de escritura; en otras palabras, son las operaciones de escritura que solicitan el reconocimiento de que la operación se ha aplicado a la mayoría de los miembros votantes del conjunto de réplicas.

Si desea consistencia causal sin durabilidad de los datos (lo que significa que las escrituras pueden revertirse), entonces las operaciones de escritura con { w: 1 } preocupación por la escritura también pueden proporcionar consistencia causal.

Nota

Las otras combinaciones de preocupaciones de lectura y escritura también pueden satisfacer las cuatro garantías de consistencia causal en algunas situaciones, pero no necesariamente en todas.

Las "majority" preocupaciones de lectura y de escritura "majority" garantizan que las cuatro garantías de consistencia causal se cumplan incluso en circunstancias (como en una partición de red) donde dos miembros de un conjunto de réplicas creen transitoriamente que son el principal. Y aunque ambos principales pueden completar escrituras con la { w: 1 } preocupación de escritura, solo uno podrá completar escrituras con la "majority" preocupación de escritura.

Por ejemplo, considere una situación en la que una partición de red divide un conjunto de réplicas de cinco miembros:

Partición de la red: nuevo primario elegido en un lado, pero el primario antiguo aún no se ha retirado.

Ejemplo

Con la partición anterior

  • Las escrituras con "majority" preocupación de P escritura pueden completarse en nuevas, pero no pueden completarse en P antiguas.

  • Las escrituras con { w: 1 } nivel de confirmación de escritura (write concern) pueden completarse en P viejo o P nuevo. Sin embargo, los guardados en P antiguo (así como los guardados replicados en S 1) se revierten una vez que estos nodos recuperan la comunicación con el resto del set de réplicas.

  • Tras una escritura exitosa con la preocupación "majority" en P new, las lecturas causalmente consistentes con "majority" la preocupación pueden observar la escritura en P new, S 2 y S 3. Las lecturas también pueden observar la escritura en P old y S 1 una vez que puedan comunicarse con el resto del conjunto de réplicas y sincronizarse con los demás miembros del conjunto de réplicas. Cualquier escritura realizada P en old o replicada en S 1 durante la partición se revierte.

Para ilustrar los requisitos de atención de lectura y nivel de confirmación de escritura (write concern), en los siguientes escenarios un cliente emite una secuencia de operaciones con varias combinaciones de atención de lectura y nivel de confirmación de escritura (write concern) al set de réplicas:

El uso del nivel de consistencia de lectura "majority" y el nivel de confirmación de escritura (write concern) "majority" en una sesión causalmente coherente proporciona las siguientes garantías de coherencia causal:

✅ Leer escrituras propias ✅ Lecturas monótonas ✅ Escrituras monótonas ✅ Escrituras que siguen a las lecturas

Nota

Escenario 1 (Leer Preocupación "mayoría" y Escribir Preocupación "mayoría")

Durante el período transitorio con dos primaries, dado que solo P new puede realizar guardados con el nivel de confirmación de escritura (write concern) { w: "majority" }, una sesión de cliente puede ejecutar exitosamente la siguiente secuencia de operaciones:

Secuencia
Ejemplo
1. Write 1 with write concern "majority" to P new
2. Read 1 with read concern "majority" to S 2
3. Write 2 with write concern "majority" to P new

4. Read 2 with read concern "majority" to S 3
For item A, update qty to 50.
Read item A.
For items with qty less than or equal to 50,
update restock to true.
Read item A.
Estado de los datos con dos instancias primarias utilizando el nivel de consistencia de lectura y el nivel de confirmación de escritura (write concern)
haga clic para ampliar

Leer los propios guardados

Read 1 reads data from S 2 that reflects a state after Write 1.
Read 2 reads data from S 3 that reflects a state after Write 1 followed by Write 2.

Lecturas monótonas

La lectura 2 lee datos de S 3 que reflejan un estado posterior a la lectura 1.

Escrituras monótonas

guardar 2 actualiza los datos en P new que reflejan un estado después de guardar 1.

Los guardados siguen a las lecturas

Escriba 2 actualizaciones de datos en P nuevos que reflejen un estado de los datos después de la Lectura 1 (lo que significa que un estado anterior refleja los datos leídos por la Lectura 1).

Nota

Escenario 2 (nivel de consistencia de lectura "mayoría" y nivel de confirmación de escritura (write concern) "mayoría")

Considera una secuencia alternativa donde Leer 1 con nivel de consistencia de lectura "majority" se enruta a S 1:

Secuencia
Ejemplo
1. Write 1 with write concern "majority" to P new
2. Read 1 with read concern "majority" to S 1
3. Write 2 with write concern "majority" to P new

4. Read 2 with with read concern "majority" to S 3
For item A, update qty to 50.
Read item A.
For items with qty less than or equal to 50,
update restock to true.
Read item A.

En esta secuencia, la Lectura 1 no puede devolver resultados hasta que el punto de confirmación mayoritaria haya avanzado en P antiguo. Esto no puede ocurrir hasta que P old y S 1 puedan comunicarse con el resto del set de réplicas; momento en el cual, P old ha renunciado (si no lo ha hecho ya), y los dos nodos se sincronizan (incluido guardar 1) con los otros nodos del set de réplicas.

Leer los propios guardados

Read 1 reflects a state of data after Write 1, albeit after the network partition has healed and the member has sync'ed from the other members of the replica set.
Read 2 reads data from S 3 that reflects a state after Write 1 followed by Write 2.

Lecturas monótonas

Read 2 lee datos de S 3 que reflejan un estado posterior a Read 1 (lo que significa que un estado anterior se refleja en los datos leídos por Read 1).

Escrituras monótonas

guardar 2 actualiza los datos en P new que reflejan un estado después de guardar 1.

Los guardados siguen a las lecturas

Escriba 2 actualizaciones de datos en P nuevos que reflejen un estado de los datos después de la Lectura 1 (lo que significa que un estado anterior refleja los datos leídos por la Lectura 1).

El uso del nivel de consistencia de lectura "majority" y el nivel de confirmación de escritura (write concern) { w: 1 } en una sesión causalmente coherente proporciona las siguientes garantías de coherencia causal si desea coherencia causal con durabilidad de datos:

❌ Lecturas propias de escrituras ✅ Lecturas monótonas ❌ Escrituras monótonas ✅ Las escrituras siguen a las lecturas

Si se desea coherencia causal sin durabilidad de los datos:

✅ Leer escrituras propias ✅ Lecturas monótonas ✅ Escrituras monótonas ✅ Escrituras que siguen a las lecturas

Nota

Escenario 3 (nivel de consistencia de lectura "mayoría" y nivel de confirmación de escritura (write concern) {w: 1})

Durante el período transitorio con dos principales, porque tanto P anterior como P nuevo pueden cumplir con escrituras con un { w: 1 } nivel de confirmación de escritura (write concern), una sesión de cliente podría realizar la siguiente secuencia de operaciones con éxito, pero no ser coherencia causal si quieres coherencia causal con durabilidad de datos:

Secuencia
Ejemplo
1. Write 1 with write concern { w: 1 } to P old
2. Read 1 with read concern "majority" to S 2
3. Write 2 with write concern { w: 1 } to P new

4. Read 2 with with read concern "majority" to S 3
For item A, update qty to 50.
Read item A.
For items with qty less than or equal to 50,
update restock to true.
Read item A.
Estado de los datos con dos principales usando mayoría de nivel de consistencia de lectura y nivel de confirmación de escritura (write concern) 1
haga clic para ampliar

En esta secuencia,

  • La Lectura 1 no podrá devolver información hasta que el punto de confirmación de la mayoría haya avanzado en P nuevo más allá del instante de guardar 1.

  • Read 2 no puede responder hasta que el punto de compromiso mayoritario haya avanzado en P nuevo más allá del momento de Guardar 2.

  • La operación de guardar 1 se revertirá cuando se solucione la partición de red.

Si se desea coherencia causal con durabilidad de datos

Leer guardados propios

La lectura 1 lee datos de S 2 que no reflejan un estado después de la guardar 1.

Lecturas monótonas

Read 2 lee datos de S 3 que reflejan un estado posterior a Read 1 (lo que significa que un estado anterior se refleja en los datos leídos por Read 1).

Escrituras monótonas

Guardar 2 actualiza los datos en P nuevos que no reflejan un estado después de Guardar 1.

Los guardados siguen a las lecturas

Guardar 2 actualizaciones de datos en P nuevo que refleje un estado después de leer 1 (lo que significa que un estado anterior refleja los datos leídos por leer 1).

Si desea coherencia causal sin la durabilidad de los datos

Leer los propios guardados

Lectura 1 obtiene datos de S 2 que reflejan un estado equivalente a Guardar 1 seguido de la rollback de Guardar 1.

Lecturas monótonas

Read 2 lee datos de S 3 que reflejan un estado posterior a Read 1 (lo que significa que un estado anterior se refleja en los datos leídos por Read 1).

Escrituras monótonas

Escriba 2 actualizaciones de datos en P nuevo que sea equivalente a después de la Escritura 1 seguido de la reversión de la Escritura 1.

Los guardados siguen a las lecturas

Guardar 2 datos de actualización en P nuevos que reflejen un estado posterior a Leer 1 (es decir, que cuyo estado anterior refleje los datos leídos por Leer 1).

Nota

Escenario 4 (Leer Preocupación "mayoría" y Escribir Preocupación {w: 1})

Considera una secuencia alternativa donde Leer 1 con nivel de consistencia de lectura "majority" se enruta a S 1:

Secuencia
Ejemplo
1. Write 1 with write concern { w: 1 } to P old
2. Read 1 with read concern "majority" to S 1
3. Write 2 with write concern { w: 1 } to P new

4. Read 2 with with read concern "majority" to S 3
For item A, update qty to 50.
Read item A.
For items with qty less than or equal to 50,
update restock to true.
Read item A.

En esta secuencia:

  • Read 1 no puede devolver resultados hasta que el punto de confirmación de la mayoría haya avanzado en S 1. Esto no puede ocurrir hasta que P antiguo y S 1 puedan comunicarse con el resto del set de réplicas. A la hora en que, P old se retiró (si no lo ha hecho ya), Guardar 1 se ha revertido desde P old y S 1, y los dos nodos sincronizan desde otros nodos del set de réplicas.

Si se desea coherencia causal con durabilidad de datos

Leer guardados propios

Los datos leídos por Read 1 no reflejan los resultados de guardar 1, que se ha revertido.

Lecturas monótonas

Read 2 lee datos de S 3 que reflejan un estado posterior a Read 1 (lo que significa que su estado anterior refleja los datos leídos por Read 1).

Escrituras monótonas

Guardar 2 actualizaciones de datos en P nuevos que no reflejen un estado posterior a la Guardar 1, que precedió a la Guardar 2 pero que se ha revertido.

Los guardados siguen a las lecturas

Guardar 2 datos de actualización en P nuevos que reflejen un estado posterior a Leer 1 (es decir, que cuyo estado anterior refleje los datos leídos por Leer 1).

Si desea coherencia causal sin la durabilidad de los datos

Leer los propios guardados

Read 1 devuelve datos que reflejan el resultado final de guardar 1 ya que guardar 1 finalmente se revierte.

Lecturas monótonas

Read 2 lee datos de S 3 que reflejan un estado después de Read 1 (lo que significa que un estado anterior refleja los datos leídos por Read 1).

Escrituras monótonas

Escriba 2 actualizaciones de datos en P nuevo que sea equivalente a después de la Escritura 1 seguido de la reversión de la Escritura 1.

Los guardados siguen a las lecturas

Guardar 2 actualizaciones de datos en P nuevo que refleje un estado después de leer 1 (lo que significa que un estado anterior refleja los datos leídos por leer 1).

El uso del nivel de consistencia de lectura "local" y del nivel de confirmación de escritura (write concern) { w: 1 } en una sesión causalmente coherente no puede garantizar la coherencia causal.

❌ Leer sus propias escrituras ❌ Lecturas monótonas ❌ Escrituras monótonas ❌ Las escrituras siguen a las lecturas

Esta combinación puede satisfacer las cuatro garantías de consistencia causal en algunas situaciones, pero no necesariamente en todas las situaciones.

Nota

Escenario 5 (nivel de consistencia de lectura "local" y nivel de confirmación de escritura (write concern) {w: 1})

Durante este período transitorio, como ambos P anterior y P nuevo pueden cumplir con escrituras con el nivel de confirmación de escritura (write concern) { w: 1 }, una sesión de cliente podría ejecutar la siguiente secuencia de operaciones con éxito, pero no sería causalmente coherente:

Secuencia
Ejemplo
1. Write 1 with write concern { w: 1 } to P old
2. Read 1 with read concern "local" to S 1
3. Write 2 with write concern { w: 1 } to P new

4. Read 2 with read concern "local" to S 3
For item A, update qty to 50.
Read item A.
For items with qty less than or equal to 50,
update restock to true.
Read item A.
Estado de los datos con dos servidores primarios usando el nivel de consistencia de lectura local y el nivel de confirmación de escritura (write concern) 1
haga clic para ampliar

❌ Leer sus propios escritos

Read 2 extrae datos de S 3 que sólo reflejan un estado después de Guardar 2 y no Guardar 1 seguido de Guardar 2.

❌ Lecturas monótonas

Read 2 lee datos de S 3 que no reflejan un estado después de Read 1 (lo que significa que un estado anterior no refleja los datos leídos por Read 1).

❌ Escrituras monótonas

Guardar 2 actualiza los datos en P nuevos que no reflejan un estado después de Guardar 1.

❌Escribir seguir leer

Guardar 2 actualiza datos en P nuevo que no reflejan un estado posterior a Read 1 (lo que significa que un estado anterior no refleja los datos leídos por Read 1).

El uso del nivel de consistencia de lectura "local" y el nivel de confirmación de escritura (write concern) "majority" en una sesión causalmente coherente proporciona las siguientes garantías de coherencia causal:

❌ Leer propias escrituras ❌ Lecturas monotónicas ✅ Escrituras monotónicas ❌ Las escrituras siguen a las lecturas

Esta combinación puede satisfacer las cuatro garantías de consistencia causal en algunas situaciones, pero no necesariamente en todas las situaciones.

Nota

Escenario 6 (nivel de consistencia de lectura "local" y nivel de confirmación de escritura (write concern) "mayoría")

Durante este período transitorio, dado que solo P nuevos pueden cumplir con escrituras con { w: "majority" } nivel de confirmación de escritura (write concern), una sesión de cliente podría emitir exitosamente la siguiente secuencia de operaciones, aunque no sea causalmente coherente:

Secuencia
Ejemplo
1. Write 1 with write concern "majority" to P new
2. Read 1 with read concern "local" to S 1
3. Write 2 with write concern "majority" to P new

4. Read 2 with read concern "local" to S 3
For item A, update qty to 50.
Read item A.
For items with qty less than or equal to 50,
update restock to true.
Read item A.
Estado de los datos con dos primarios utilizando nivel de consistencia de lectura local y nivel de confirmación de escritura (write concern) mayoría
haga clic para ampliar

❌Leer escritos propios.

Leer 1 lee S 1 1datos de que no reflejan un estado después de escribir.

❌ Lecturas monótonas.

Read 2 lee datos de S 3 que no reflejan un estado después de Read 1 (lo que significa que un estado anterior no refleja los datos leídos por Read 1).

✅ Escrituras monotónicas

guardar 2 actualiza los datos en P new que reflejan un estado después de guardar 1.

❌Escribe sigue lee.

Guardar 2 actualiza datos en P nuevo que no reflejan un estado posterior a Read 1 (lo que significa que un estado anterior no refleja los datos leídos por Read 1).

Volver

Leer Aislamiento, Coherencia y Recencia