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:
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 pueden completarse
{ w: 1 }enPantiguo oPnuevo. Sin embargo, las escrituras enPantiguo (así como las replicadasS1 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,Plas lecturas causalmente consistentes"majority"con pueden observar la escrituraPen,S2 y,S3 respectivamente. Las lecturas también pueden observar la escritura en y,Prespectivamente,S1 una vez que se comunican con el resto del conjunto de réplicas y se sincronizan con los demás miembros. Cualquier escritura realizadaPen y/o replicada enS1 durante la partición se revierte.
Scenarios
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:
Leer preocupación
"majority"y escribir preocupación"majority"Leer preocupación
"local"y escribir preocupación"majority"
Leer preocupación y escribir preocupación "majority" "majority"
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 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 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 |
✅ Escrituras monótonas | guardar 2 actualiza los datos en |
✅ Escribe y sigue leyendo | La 2 escritura 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")
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 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,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 |
✅ Escrituras monótonas | guardar 2 actualiza los datos en |
✅ Escribe y sigue leyendo | La 2 escritura actualiza los datos en |
Leer preocupación y escribir preocupación "majority" {w: 1}
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 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 no puede regresar hasta que el punto de confirmación mayoritario haya avanzado en 1
Pnuevo 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
Pnuevo 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 |
✅ Lecturas monótonas | La lectura lee datos 2 de |
❌ Escrituras monótonas | Escribir actualiza datos 2 sobre |
✅ Escribe y sigue leyendo | La 2 escritura actualiza los datos en |
➤ Si desea consistencia causal sin durabilidad de los datos
✅ Leer escritos propios | Leer 1 lee datos de |
✅ Lecturas monótonas | La lectura lee datos 2 de |
✅ Escrituras monótonas | 2 La escritura actualiza los datos en |
✅ Escribe y sigue leyendo | Escribir actualiza datos 2 en |
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 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:
La lectura no puede regresar hasta que el punto de confirmación mayoritario haya avanzado 1
S1 en. Esto no puede ocurrir hasta quePantiguo yS1 puedan comunicarse con el resto del conjunto de réplicas. En ese momento,Pantiguo se 1 retira (si no lo está ya),PS1la 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 |
❌ Escrituras monótonas | La escritura2actualiza los datos de |
✅ Escribe y sigue leyendo | Escribir actualiza datos 2 en |
➤ 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 |
✅ Escrituras monótonas | 2 La escritura actualiza los datos en |
✅ Escribe y sigue leyendo | La 2 escritura actualiza los datos en |
Leer preocupación y escribir preocupación "local" {w: 1}
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 |
|---|---|
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 | Leer 2 lee datos de |
❌ Lecturas monótonas | La lectura lee datos 2 de |
❌ Escrituras monótonas | Escribir actualiza datos 2 sobre |
❌Escribir seguir leer | Guardar 2 actualiza datos en |
Leer preocupación y escribir preocupación "local" "majority"
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 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. | La lectura lee datos 2 de |
✅ Escrituras monotónicas | guardar 2 actualiza los datos en |
❌Escribe sigue lee. | Guardar 2 actualiza datos en |