Saltar al contenido

¿Cuál es la diferencia entre lectura no repetible y lectura fantasma?

Luego de de nuestra prolongada búsqueda de información solucionamos esta interrogante que suelen tener algunos de nuestros usuarios. Te ofrecemos la respuesta y nuestro deseo es que resulte de gran ayuda.

Solución:

De Wikipedia (que tiene excelentes y detallados ejemplos para esto):

Se produce una lectura no repetible cuando, durante el curso de una transacción, una fila se recupera dos veces y los valores dentro de la fila difieren entre las lecturas.

y

Una lectura fantasma ocurre cuando, en el curso de una transacción, se ejecutan dos consultas idénticas y la colección de filas devuelta por la segunda consulta es diferente de la primera.

Ejemplos simples:

  • El usuario A ejecuta la misma consulta dos veces.
  • En el medio, el usuario B ejecuta una transacción y confirma.
  • Lectura no repetible: la fila A que el usuario A ha consultado tiene un valor diferente la segunda vez.
  • Lectura fantasma: todas las filas de la consulta tienen el mismo valor antes y después, pero se están seleccionando filas diferentes (porque B ha eliminado o insertado algunos). Ejemplo: select sum(x) from table; devolverá un resultado diferente incluso si ninguna de las filas afectadas se ha actualizado, si se han agregado o eliminado filas.

En el ejemplo anterior, ¿qué nivel de aislamiento se utilizará?

El nivel de aislamiento que necesita depende de su aplicación. Hay un alto costo para un nivel de aislamiento “mejor” (como una simultaneidad reducida).

En su ejemplo, no tendrá una lectura fantasma, porque selecciona solo de una sola fila (identificada por primaria key). Puede tener lecturas no repetibles, por lo que si eso es un problema, es posible que desee tener un nivel de aislamiento que lo impida. En Oracle, la transacción A también podría emitir SELECCIONAR PARA ACTUALIZAR, luego la transacción B no puede cambiar la fila hasta que A termine.

Una manera simple en la que me gusta pensarlo es:

Tanto las lecturas no repetibles como las fantasmas tienen que ver con operaciones de modificación de datos de una transacción diferente, que se confirmaron después de que comenzó su transacción y luego las leyó su transacción.

Las lecturas no repetibles son cuando su transacción se lee confirmada ACTUALIZACIONES de otra transacción. La misma fila ahora tiene valores diferentes a los que tenía cuando comenzó su transacción.

Las lecturas fantasma son similares, pero cuando se leen de datos confirmados INSERTOS y/o ELIMINA de otra transacción. Hay filas nuevas o filas que han desaparecido desde que iniciaste la transacción.

Las lecturas sucias son similar a lecturas no repetibles y fantasmas, pero se relacionan con la lectura de datos NO COMPROMETIDOS, y ocurren cuando se lee una ACTUALIZACIÓN, INSERCIÓN o ELIMINACIÓN de otra transacción, y la otra transacción aún NO ha confirmado los datos. Está leyendo datos “en progreso”, que pueden no estar completos y es posible que nunca se confirmen.

El Lectura no repetible anomalía se ve de la siguiente manera:

Lectura no repetible

  1. Alice y Bob inician dos transacciones de base de datos.
  2. Bob lee el registro de publicación y el valor de la columna de título es Transacciones.
  3. Alice modifica el título de un registro de publicación dado al valor de ACID.
  4. Alice confirma su transacción de base de datos.
  5. Si Bob vuelve a leer el registro de la publicación, observará una versión diferente de esta fila de la tabla.

El Lectura fantasma anomalía puede ocurrir de la siguiente manera:

Lectura fantasma

  1. Alice y Bob inician dos transacciones de base de datos.
  2. Bob’s lee todos los registros post_comment asociados con la fila de publicación con el valor de identificador de 1.
  3. Alice agrega un nuevo registro post_comment que está asociado con la fila de publicación que tiene el valor de identificador de 1.
  4. Alice confirma su transacción de base de datos.
  5. Si Bob vuelve a leer los registros post_comment que tienen el valor de la columna post_id igual a 1, observará una versión diferente de este conjunto de resultados.

Entonces, mientras el Lectura no repetible se aplica a una sola fila, el Lectura fantasma se trata de un rango de registros que satisfacen un criterio de filtrado de consulta dado.

Puedes añadir valor a nuestro contenido informacional participando con tu experiencia en los informes.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *