Modificado en la versión 5.0.
Una consulta con la preocupación de lectura "snapshot" devuelve los datos mayoritariamente confirmados tal como aparecen en los fragmentos de un punto específico en el pasado reciente. La preocupación de lectura "snapshot" ofrece sus garantías solo si la transacción se confirma con la preocupación de escritura. "majority".
La lectura de preocupación está disponible "snapshot" para transacciones de múltiples documentos y, a partir de MongoDB, para 5.0 ciertas operaciones de lectura fuera de transacciones de múltiples documentos.
Si la transacción no es parte de una sesión causalmente consistente, al confirmar la transacción con preocupación de escritura, se garantiza que las operaciones
"majority"de transacción habrán leído desde una instantánea de los datos mayoritariamente confirmados.Si la transacción es parte de una sesión causalmente consistente, al confirmar la transacción con preocupación
"majority"de escritura, se garantiza que las operaciones de transacción hayan leído desde una instantánea de datos mayoritariamente confirmados que proporciona consistencia causal con la operación inmediatamente anterior al inicio de la transacción.
Fuera de las transacciones de múltiples documentos, la lectura de interés "snapshot" está disponible en documentos primarios y secundarios para las siguientes operaciones de lectura:
Todos los demás comandos de lectura "snapshot" prohíben.
Operaciones
Para obtener una lista de todas las operaciones que aceptan inquietudes de lectura,consulte Operaciones que admiten inquietudes de lectura.
Limitación del aislamiento de instantáneas
Las operaciones de lectura con nivel de consistencia de lectura "snapshot" garantizan el aislamiento de snapshot solo en ausencia de operaciones simultáneas de descarte o cambio de nombre en colecciones durante la operación de lectura. En la mayoría de los casos, MongoDB detecta cuándo una operación remueve una colección antes del snapshot de lectura y reporta un error SnapshotUnavailable. Si esta detección no es posible, la operación de lectura refleja la colección descartada o renombrada, aunque la colección existiera durante el snapshot. Esta limitación aplica a todos los niveles de consistencia de lectura para operaciones dentro y fuera de una transacción multi-documento.
Leer Preocupación y Transacciones
Las transacciones de múltiples documentos admiten la lectura de la preocupación"snapshot", así como"local"y"majority".
Nota
La preocupación de lectura se configura a nivel de transacción, no a nivel de operación individual. Para configurar la preocupación de lectura para transacciones, consulte Transacciones y preocupación de lectura.
Leer Preocupación y atClusterTime
Nuevo en la versión 5.0.
Fuera de las transacciones multidocumento, las lecturas con la preocupación de lectura "snapshot" admiten el parámetro atClusterTime opcional. El parámetro atClusterTime permite especificar la marca de tiempo de la lectura. Para satisfacer una solicitud de lectura con un especificado atClusterTime de T, el ejecuta la solicitud basándose en los datos disponibles en el momento mongod T.
Puede obtener el operationTime o clusterTime de una operación desde la respuesta de db.runCommand() o desde el Session() objeto.
El siguiente comando realiza una operación de búsqueda con preocupación de lectura y especifica que la operación debe leer datos de la instantánea en el momento "snapshot" del Timestamp(1613577600, 1) clúster.
db.runCommand( { find: "restaurants", filter: { _id: 5 }, readConcern: { level: "snapshot", atClusterTime: Timestamp(1613577600, 1) }, } )
Si atClusterTime no se suministra mongos el parámetro, el, o en conjuntos mongod de réplicas de un solo miembro, el, selecciona la marca de tiempo de la última instantánea confirmada atClusterTime por la mayoría como y la devuelve al cliente.
Fuera de las transacciones, "snapshot" se garantiza que las lecturas leerán desde datos mayoritariamente comprometidos.
atClusterTime Consideraciones y comportamiento
Los valores permitidos para
atClusterTimedependen delminSnapshotHistoryWindowInSecondsparámetro.minSnapshotHistoryWindowInSecondses el intervalo de tiempo mínimo (en segundos) durante el cual el motor de almacenamiento conserva el historial de instantáneas. Si especifica un valor atClusterTime anterior a la instantánea más antigua conservadaminSnapshotHistoryWindowInSecondssegún, devuelve unmongoderror.Si realiza una operación de lectura con contra un miembro del conjunto de réplicas retrasadas, los datos mayoritariamente comprometidos que se devuelvan podrían estar
"snapshot"obsoletos.No es posible especificar
atClusterTimepara dentro"snapshot"de sesiones causalmente consistentes.
Nivel de consistencia de lectura en colecciones con tamaño fijo
A partir de la 5.0 versión, no es posible utilizar la lectura de interés al "snapshot" leer desde una colección limitada.