Sobes.tech
Junior — Middle

Μπορείτε να εξηγήσετε τι εννοείται με το Phantom read στο πλαίσιο των συναλλαγών και των βάσεων δεδομένων;

sobes.tech AI

Απάντηση από AI

Η φαντασματική ανάγνωση είναι μια κατάσταση στις συναλλαγές όπου, επαναλαμβάνοντας το ίδιο ερώτημα εντός μιας συναλλαγής, εμφανίζονται νέες γραμμές που δεν ήταν ορατές στην πρώτη ανάγνωση.

Παράδειγμα:

  1. Η συναλλαγή T1 εκτελεί το ερώτημα SELECT * FROM orders WHERE status = 'new' και λαμβάνει 5 εγγραφές.
  2. Ενώ η T1 δεν έχει ολοκληρωθεί, μια άλλη συναλλαγή T2 προσθέτει μια νέα εγγραφή με status = 'new' και δεσμεύει τις αλλαγές.
  3. Αν η T1 επαναλάβει το ίδιο ερώτημα, θα δει ήδη 6 εγγραφές — η νέα γραμμή εμφανίστηκε ως "φαντασματική".

Η φαντασματική ανάγνωση συμβαίνει επειδή το εύρος των γραμμών που ικανοποιούν την συνθήκη του ερωτήματος άλλαξε μεταξύ των δύο αναγνώσεων.

Για να αποφευχθεί η φαντασματική ανάγνωση, χρησιμοποιείται το επίπεδο απομόνωσης SERIALIZABLE, το οποίο μπλοκάρει τα εύρη δεδομένων, αποτρέποντας την εμφάνιση νέων γραμμών μεταξύ των αναγνώσεων. Σε επίπεδα READ COMMITTED ή REPEATABLE READ, μπορεί να εμφανιστούν φαντάσματα.