Wat is het verschil tussen een niet-herhaalbare lezing (non-repeatable read) en een spooklezing (phantom read)?
sobes.tech AI
Antwoord van AI
Niet-herhaalbare lezing (non-repeatable read) en spooklezing (phantom read) zijn twee verschillende soorten anomalieën die kunnen optreden bij gelijktijdige toegang tot gegevens in databases.
-
Niet-herhaalbare lezing: gebeurt wanneer binnen één transactie dezelfde query naar dezelfde record verschillende gegevens retourneert omdat een andere transactie dat record heeft gewijzigd of verwijderd en de wijzigingen heeft bevestigd.
-
Spooklezing: gebeurt wanneer binnen één transactie een herhaalde query op een tabel met een voorwaarde een verschillend aantal rijen retourneert omdat een andere transactie rijen heeft toegevoegd of verwijderd die aan die voorwaarde voldoen.
Voorbeeld:
-
Niet-herhaalbare lezing: een transactie leest een rij met id=1, daarna wijzigt een andere transactie die rij en bevestigt de wijziging, vervolgens leest de eerste transactie opnieuw de rij met id=1 en ziet de gewijzigde gegevens.
-
Spooklezing: een transactie leest alle rijen waar de status='actief' is, daarna voegt een andere transactie een nieuwe rij toe met status='actief' en bevestigt, daarna leest de eerste transactie opnieuw de rijen met status='actief' en ziet de nieuwe "spook"-rij.
Zo is niet-herhaalbare lezing gerelateerd aan wijzigingen in bestaande rijen, terwijl spooklezing te maken heeft met het verschijnen of verdwijnen van nieuwe rijen die aan de voorwaarde voldoen.