Docs Menu
Docs Home
/ /
Aislamiento de lectura, consistencia y actualidad

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

Con MongoDB Sesiones de cliente causalmente consistentes, diferentes combinaciones de preocupaciones de lectura y escritura proporcionan 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
Leer sus propias escrituras
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:

  • Las operaciones de lectura con prioridad de lectura; en otras palabras, las operaciones de lectura que devuelven datos que han sido reconocidos por la mayoría de los miembros del conjunto de réplicas y son "majority" duraderos.

  • 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 pueden completarse { w: 1 } en P antiguo o P nuevo. Sin embargo, las escrituras en P antiguo (así como las replicadas S 1 en) se revierten una vez que estos miembros recuperan la comunicación con el resto del conjunto de réplicas.

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

Para ilustrar los requisitos de lectura y escritura, los siguientes escenarios tienen un cliente que emite una secuencia de operaciones con varias combinaciones de preocupaciones de lectura y escritura al conjunto de réplicas:

El uso de la preocupación de lectura y "majority" la preocupación de escritura "majority" en una sesión causalmente consistente proporciona las siguientes garantías de consistencia 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 primarios, debido a que solo P nuevos pueden cumplir escrituras con preocupación de escritura, una sesión de cliente puede emitir la siguiente secuencia de operaciones con { w: "majority" } éxito:

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 primarios que utilizan la mayoría de preocupación de lectura y la mayoría de preocupación de escritura
haga clic para ampliar

Leer escritos propios

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

2 Leer lee datos de S 3 que reflejan un estado después de 1 Leer.

✅ Escrituras monótonas

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

Escribe y sigue leyendo

La 2 escritura actualiza los datos en P nuevos que reflejan 1 un estado de los datos después de la lectura (lo que significa que un estado 1anterior refleja los datos leídos por la lectura).

Nota

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

Considere una secuencia alternativa donde la lectura 1 con preocupación de lectura "majority" se dirige S 1 a:

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,1 la lectura no puede regresar hasta que el punto de confirmación mayoritario haya avanzado P en. Esto no puede ocurrir hasta P que y S 1 puedan comunicarse con el resto del conjunto de réplicas; en ese momento, seP ha retirado (si no lo está ya) y los dos miembros se sincronizan (incluido el 1 punto de escritura) con los demás miembros del conjunto de réplicas.

Leer escritos propios

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

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

✅ Escrituras monótonas

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

Escribe y sigue leyendo

La 2 escritura actualiza los datos en P nuevos que reflejan 1 un estado de los datos después de la lectura (lo que significa que un estado 1anterior refleja los datos leídos por la lectura).

El uso de la preocupación de lectura y "majority" la preocupación de escritura { w: 1 } en una sesión causalmente consistente proporciona las siguientes garantías de consistencia causal si desea consistencia causal con durabilidad de datos:

❌ Leer escrituras propias ✅ 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 (Leer preocupación "mayoría" y escribir preocupación {w: 1})

Durante el período transitorio con dos primarios, debido a que tanto P antiguo como P nuevo pueden cumplir escrituras con { w: 1 } preocupación de escritura, una sesión de cliente podría emitir la siguiente secuencia de operaciones exitosamente pero no ser causalmente consistente si desea consistencia 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 primarios que utilizan la preocupación de lectura mayoritaria y la preocupación de escritura 1
haga clic para ampliar

En esta secuencia,

  • La lectura no puede regresar hasta que el punto de confirmación mayoritario haya avanzado en 1 P nuevo más allá del tiempo de 1 escritura.

  • La lectura no puede regresar hasta que el punto de confirmación mayoritario haya avanzado en 2 P nuevo más allá del tiempo de 2 escritura.

  • La escritura se revertirá cuando se recupere la partición de red.1

Si desea consistencia causal con durabilidad de los datos

Leer sus propios escritos

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

Lecturas monótonas

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

❌ Escrituras monótonas

Escribir actualiza datos 2 sobre P nuevos que no reflejan un estado después de 1 Escribir.

Escribe y sigue leyendo

La 2 escritura actualiza los datos en P nuevos 1 que reflejan un estado posterior a 1 la lectura (lo que significa que un estado anterior refleja los datos leídos por la lectura).

Si desea consistencia causal sin durabilidad de los datos

Leer escritos propios

Leer 1 lee datos de S 2 que reflejan 1 1un estado equivalente a Escribir seguido de una reversión de Escribir.

Lecturas monótonas

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

✅ Escrituras monótonas

2 La escritura actualiza los datos en P nuevo que es equivalente a después 1 de la escritura seguida de la reversión de la 1 escritura.

Escribe y sigue leyendo

Escribir actualiza datos 2 en P nuevos que reflejan un estado posterior a 1 la lectura (es decir, cuyo estado anterior refleja los datos leídos por la 1 lectura).

Nota

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

Considere una secuencia alternativa donde la lectura 1 con preocupación de lectura "majority" se dirige S 1 a:

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:

  • La lectura no puede regresar hasta que el punto de confirmación mayoritario haya avanzado 1 S 1 en. Esto no puede ocurrir hasta que P antiguo y S 1 puedan comunicarse con el resto del conjunto de réplicas. En ese momento, P antiguo se 1 retira (si no lo está ya),P S 1la escritura se revierte desde antiguo y, y ambos miembros se sincronizan con los demás miembros del conjunto de réplicas.

Si desea consistencia causal con durabilidad de los datos

Leer sus propios escritos

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

Lecturas monótonas

La lectura lee datos 2 de S 3 que 1 1 reflejan un estado posterior a la lectura (es decir, cuyo estado anterior refleja los datos leídos por la lectura).

❌ Escrituras monótonas

La escritura2actualiza los datos de P nuevos que no reflejan un estado posterior a la escritura1, que había precedido a la escritura2pero se ha revertido.

Escribe y sigue leyendo

Escribir actualiza datos 2 en P nuevos que reflejan un estado posterior a 1 la lectura (es decir, cuyo estado anterior refleja los datos leídos por la 1 lectura).

Si desea consistencia causal sin durabilidad de los datos

Leer escritos propios

La lectura1devuelve datos que reflejan el resultado final de la escritura1, ya que la escritura1finalmente revierte.

Lecturas monótonas

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

✅ Escrituras monótonas

2 La escritura actualiza los datos en P nuevo que es equivalente a después 1 de la escritura seguida de la reversión de la 1 escritura.

Escribe y sigue leyendo

La 2 escritura actualiza los datos en P nuevos 1 que reflejan un estado posterior a 1 la lectura (lo que significa que un estado anterior refleja los datos leídos por la lectura).

El uso de la preocupación de lectura y "local" la preocupación de escritura { w: 1 } en una sesión causalmente consistente no puede garantizar la consistencia causal.

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

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

Nota

Escenario 5 (Leer preocupación "local" y escribir preocupación {w: 1})

Durante este período transitorio, debido a que tanto P antiguo como P nuevo pueden realizar escrituras con { w: 1 } preocupación de escritura, una sesión de cliente podría emitir la siguiente secuencia de operaciones exitosamente pero no ser causalmente consistente:

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 datos primarios que utilizan la preocupación de lectura local y la preocupación de escritura 1
haga clic para ampliar

❌ Leer sus propios escritos

Leer 2 lee datos de S 3 que solo reflejan 2 un estado después de Escribir y 2 1no de Escribir seguido de Escribir.

❌ Lecturas monótonas

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

❌ Escrituras monótonas

Escribir actualiza datos 2 sobre P nuevos que no reflejan un estado después de 1 Escribir.

❌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 de la preocupación de lectura y "local" la preocupación de escritura "majority" en una sesión causalmente consistente proporciona las siguientes garantías de consistencia 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.

Nota

Escenario 6 (Leer preocupación "local" y escribir preocupación "mayoritaria")

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 que utilizan la preocupación de lectura local y la preocupación de escritura mayoritaria
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.

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

✅ 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

Aislamiento de lectura, consistencia y actualidad