Junior — Middle
Μπορείτε να εξηγήσετε τι εννοείται με το Phantom read στο πλαίσιο των συναλλαγών και των βάσεων δεδομένων;
sobes.tech AI
Απάντηση από AI
Η φαντασματική ανάγνωση είναι μια κατάσταση στις συναλλαγές όπου, επαναλαμβάνοντας το ίδιο ερώτημα εντός μιας συναλλαγής, εμφανίζονται νέες γραμμές που δεν ήταν ορατές στην πρώτη ανάγνωση.
Παράδειγμα:
- Η συναλλαγή T1 εκτελεί το ερώτημα
SELECT * FROM orders WHERE status = 'new'και λαμβάνει 5 εγγραφές. - Ενώ η T1 δεν έχει ολοκληρωθεί, μια άλλη συναλλαγή T2 προσθέτει μια νέα εγγραφή με
status = 'new'και δεσμεύει τις αλλαγές. - Αν η T1 επαναλάβει το ίδιο ερώτημα, θα δει ήδη 6 εγγραφές — η νέα γραμμή εμφανίστηκε ως "φαντασματική".
Η φαντασματική ανάγνωση συμβαίνει επειδή το εύρος των γραμμών που ικανοποιούν την συνθήκη του ερωτήματος άλλαξε μεταξύ των δύο αναγνώσεων.
Για να αποφευχθεί η φαντασματική ανάγνωση, χρησιμοποιείται το επίπεδο απομόνωσης SERIALIZABLE, το οποίο μπλοκάρει τα εύρη δεδομένων, αποτρέποντας την εμφάνιση νέων γραμμών μεταξύ των αναγνώσεων. Σε επίπεδα READ COMMITTED ή REPEATABLE READ, μπορεί να εμφανιστούν φαντάσματα.