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:
Ejemplo
Con la partición anterior
Las escrituras con
"majority"preocupación dePescritura pueden completarse en nuevas, pero no pueden completarse enPantiguas.Las escrituras con
{ w: 1 }nivel de confirmación de escritura (write concern) pueden completarse enPviejo oPnuevo. Sin embargo, los guardados enPantiguo (así como los guardados replicados enS1) 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"enPnew, las lecturas causalmente consistentes con"majority"la preocupación pueden observar la escritura enPnew,S2 yS3. Las lecturas también pueden observar la escritura enPold yS1 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 realizadaPen old o replicada enS1 durante la partición se revierte.
Scenarios
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:
nivel de consistencia de lectura
"local"y nivel de confirmación de escritura (write concern){w: 1}
Nivel de consistencia de lectura "majority" y nivel de confirmación de escritura (write concern) "majority"
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 new2. Read 1 with read concern "majority" to S 23. Write 2 with write concern "majority" to P new4. 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. |
✅ 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 |
✅ Escrituras monótonas | guardar 2 actualiza los datos en |
✅ Los guardados siguen a las lecturas | Escriba 2 actualizaciones de datos en |
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 new2. Read 1 with read concern "majority" to S 13. Write 2 with write concern "majority" to P new4. 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 |
✅ Escrituras monótonas | guardar 2 actualiza los datos en |
✅ Los guardados siguen a las lecturas | Escriba 2 actualizaciones de datos en |
Nivel de consistencia de lectura "majority" y nivel de confirmación de escritura (write concern) {w: 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 old2. Read 1 with read concern "majority" to S 23. Write 2 with write concern { w: 1 } to P new4. 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 podrá devolver información hasta que el punto de confirmación de la mayoría haya avanzado en
Pnuevo más allá del instante de guardar 1.Read 2 no puede responder hasta que el punto de compromiso mayoritario haya avanzado en
Pnuevo 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 |
✅ Lecturas monótonas | Read 2 lee datos de |
❌ Escrituras monótonas | Guardar 2 actualiza los datos en |
✅ Los guardados siguen a las lecturas | Guardar 2 actualizaciones de datos en |
➤ Si desea coherencia causal sin la durabilidad de los datos
✅ Leer los propios guardados | Lectura 1 obtiene datos de |
✅ Lecturas monótonas | Read 2 lee datos de |
✅ Escrituras monótonas | Escriba 2 actualizaciones de datos en |
✅ Los guardados siguen a las lecturas | Guardar 2 datos de actualización en |
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 old2. Read 1 with read concern "majority" to S 13. Write 2 with write concern { w: 1 } to P new4. 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
S1. Esto no puede ocurrir hasta quePantiguo yS1 puedan comunicarse con el resto del set de réplicas. A la hora en que,Pold se retiró (si no lo ha hecho ya), Guardar 1 se ha revertido desdePold yS1, 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 |
❌ Escrituras monótonas | Guardar 2 actualizaciones de datos en |
✅ Los guardados siguen a las lecturas | Guardar 2 datos de actualización en |
➤ 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 |
✅ Escrituras monótonas | Escriba 2 actualizaciones de datos en |
✅ Los guardados siguen a las lecturas | Guardar 2 actualizaciones de datos en |
Nivel de consistencia de lectura "local" y nivel de confirmación de escritura (write concern) {w: 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 |
|---|---|
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. |
❌ Leer sus propios escritos | Read 2 extrae datos de |
❌ Lecturas monótonas | Read 2 lee datos de |
❌ Escrituras monótonas | Guardar 2 actualiza los datos en |
❌Escribir seguir leer | Guardar 2 actualiza datos en |
Nivel de consistencia de lectura "local" y nivel de confirmación de escritura (write concern) "majority"
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 new2. Read 1 with read concern "local" to S 13. Write 2 with write concern "majority" to P new4. 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. |
❌Leer escritos propios. | Leer 1 lee |
❌ Lecturas monótonas. | Read 2 lee datos de |
✅ Escrituras monotónicas | guardar 2 actualiza los datos en |
❌Escribe sigue lee. | Guardar 2 actualiza datos en |