Sobes.tech
Junior

Ποια είναι η διαφορά μεταξύ μιας μη επαναλαμβανόμενης ανάγνωσης (non-repeatable read) και μιας φανταστικής ανάγνωσης (phantom read);

sobes.tech AI

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

Η μη επαναλαμβανόμενη ανάγνωση (non-repeatable read) και η φανταστική ανάγνωση (phantom read) είναι δύο διαφορετικοί τύποι ανωμαλιών που μπορούν να εμφανιστούν κατά την παράλληλη πρόσβαση σε δεδομένα σε βάσεις δεδομένων.

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

  • Φανταστική ανάγνωση: συμβαίνει όταν, σε μια ίδια συναλλαγή, ένα επαναλαμβανόμενο ερώτημα σε έναν πίνακα με μια συνθήκη επιστρέφει διαφορετικό αριθμό γραμμών επειδή μια άλλη συναλλαγή έχει προσθέσει ή διαγράψει γραμμές που ικανοποιούν τη συνθήκη.

Παράδειγμα:

  • Μη επαναλαμβανόμενη ανάγνωση: μια συναλλαγή διαβάζει μια γραμμή με id=1, στη συνέχεια μια άλλη συναλλαγή ενημερώνει αυτή τη γραμμή και επιβεβαιώνει, και μετά η πρώτη συναλλαγή διαβάζει ξανά τη γραμμή με id=1 και βλέπει τα τροποποιημένα δεδομένα.

  • Φανταστική ανάγνωση: μια συναλλαγή διαβάζει όλες τις γραμμές όπου η κατάσταση='ενεργό', στη συνέχεια μια άλλη συναλλαγή προσθέτει μια νέα γραμμή με κατάσταση='ενεργό' και επιβεβαιώνει, και μετά η πρώτη συναλλαγή διαβάζει ξανά τις γραμμές με κατάσταση='ενεργό' και βλέπει τη νέα "φανταστική" γραμμή.

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