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 diversas 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 desea consistencia causal con durabilidad de datos, entonces, como se muestra en la tabla, solo las operaciones de lectura con "majority" nivel de consistencia de lectura y las operaciones de escritura con "majority" nivel de confirmación de escritura (write concern) pueden garantizar las 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.Operaciones de escritura con
"majority"nivel de confirmación de escritura (write concern); en otras palabras, las operaciones de escritura que piden una confirmación de que la operación se haya aplicado a la mayoría de los nodos votantes del set de réplicas.
Si quieres coherencia causal sin durabilidad de los datos (lo que significa que las escrituras pueden revertirse), las operaciones de escritura con el nivel de confirmación de escritura (write concern) { w: 1 } también pueden proporcionar coherencia causal.
Nota
Las otras combinaciones de lectura y niveles de confirmación de escritura (write concern) también pueden cumplir con las cuatro garantías de coherencia causal en algunas situaciones, pero no necesariamente en todas.
El nivel de consistencia de lectura "majority" y el nivel de confirmación de escritura (write concern) "majority" garantizan que las cuatro garantías de coherencia causal se mantienen incluso en circunstancias (por ejemplo, con una partición de red) en las que dos miembros de un set de réplicas creen transitoriamente que son los principales. Y mientras ambos primarios pueden completar escrituras con nivel de confirmación de escritura (write concern) { w: 1 }, solo uno de los primarios podrá completar escrituras con nivel de confirmación de escritura (write concern) "majority".
Por ejemplo, considera una situación en la que una partición de red divide un set de réplicas de cinco nodos:
Ejemplo
Con la partición anterior
Las operaciones de guardado realizadas con
"majority"nivel de confirmación de escritura (write concern) pueden completarse enPnuevo pero no pueden completarse enPantiguo.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.Después de un exitoso guardar con
"majority"nivel de confirmación de escritura (write concern) enPnuevo, las lecturas causalmente coherentes con"majority"nivel de consistencia de lectura pueden observar la escritura enPnuevo,S2 yS3. Las lecturas también pueden observar la escritura enPantiguo yS1 una vez que pueden comunicarse con el resto del set de réplicas y sincronizarse con los otros nodos del set de réplicas. Cualquier guardados realizada enPantiguo y/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 sus propias escrituras ✅ Lecturas monótonas ✅ Escrituras monótonas ✅ Las escrituras siguen a las lecturas
Nota
Escenario 1 (nivel de consistencia de lectura "mayoría" y nivel de confirmación de escritura (write concern) "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 | Read 2 lee datos de |
✅ Escrituras monótonas | guardar 2 actualiza los datos en |
✅ Los guardados siguen a las lecturas | Guardar 2 actualiza los 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 | Guardar 2 actualiza los 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 sus propias escrituras ✅ Lecturas monótonas ✅ Escrituras monótonas ✅ Las escrituras 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 | Guardar 2 actualiza datos en |
✅ Los guardados siguen a las lecturas | Guardar 2 datos de actualización en |
Nota
Escenario 4 (nivel de consistencia de lectura "mayoría" y nivel de confirmación de escritura (write concern) {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 | Guardar 2 actualiza 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. |
❌ Lee tus propios escritos | Read 2 extrae datos de |
❌ Lecturas monótonas | Read 2 lee datos de |
❌ Escrituras monotónicas | Guardar 2 actualiza los datos en |
❌ guardar 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 propios guardados. | La lectura 1 lee datos de |
❌ Lecturas monotónicas. | Read 2 lee datos de |
✅ Escrituras monotónicas | guardar 2 actualiza los datos en |
❌ Guardar sigue a la lectura. | Guardar 2 actualiza datos en |