Ποια επίπεδα απομόνωσης συναλλαγών σε βάσεις δεδομένων γνωρίζεις;
sobes.tech AI
Απάντηση από AI
Στο πρότυπο SQL ορίζονται τέσσερα επίπεδα απομόνωσης συναλλαγών: Read Uncommitted, Read Committed, Repeatable Read, Serializable.
-
Read Uncommitted: Το χαμηλότερο επίπεδο. Μια συναλλαγή μπορεί να διαβάσει δεδομένα που δεν έχουν ακόμη επιβεβαιωθεί (δηλαδή, εκτελεσμένα από μια άλλη συναλλαγή που δεν έχει ολοκληρώσει με
COMMIT). Αυτό οδηγεί σε "βρώμικες" αναγνώσεις (dirty reads). -
Read Committed: Η συναλλαγή βλέπει μόνο δεδομένα που έχουν επιβεβαιωθεί πριν ή κατά τη διάρκεια της εκτέλεσής της. Προλαμβάνει τις "βρώμικες" αναγνώσεις, αλλά επιτρέπει μη επαναλαμβανόμενες αναγνώσεις (non-repeatable reads) και φαντάσματα (phantom reads).
- Μη επαναλαμβανόμενες αναγνώσεις: Η ίδια ανάγνωση εντός μιας συναλλαγής μπορεί να επιστρέψει διαφορετικά δεδομένα, επειδή μια άλλη συναλλαγή τα έχει τροποποιήσει και επιβεβαιώσει.
- Φαντάσματα: Κατά την εκτέλεση ενός ερωτήματος με συνθήκη
WHERE, μια δεύτερη συναλλαγή προσθέτει ή διαγράφει γραμμές που πληρούν τη συνθήκη, και η ίδια ερώτηση εκτελεσμένη ξανά εντός της πρώτης συναλλαγής επιστρέφει διαφορετικό σύνολο γραμμών.
-
Repeatable Read: Η συναλλαγή βλέπει μόνο δεδομένα που έχουν επιβεβαιωθεί πριν από την έναρξή της. Διασφαλίζει ότι οι επαναλαμβανόμενες αναγνώσεις των ίδιων γραμμών εντός μιας συναλλαγής θα επιστρέφουν τα ίδια δεδομένα. Προλαμβάνει τις "βρώμικες" και μη επαναλαμβανόμενες αναγνώσεις. Επιτρέπει φαντάσματα.
// Παράδειγμα Repeatable Read // Συναλλαγή 1 // BEGIN TRANSACTION; // SELECT COUNT(*) FROM users WHERE status = 'active'; // Για παράδειγμα, 100 // Συναλλαγή 2 (εκτελείται ταυτόχρονα) // BEGIN TRANSACTION; // INSERT INTO users (name, status) VALUES ('Νέος χρήστης', 'active'); // COMMIT; // Συναλλαγή 1 // SELECT COUNT(*) FROM users WHERE status = 'active'; // Ακόμα 100 (φάντασμα) // COMMIT; -
Serializable: Το υψηλότερο επίπεδο απομόνωσης. Διασφαλίζει ότι η παράλληλη εκτέλεση συναλλαγών θα είναι ισοδύναμη με μια διαδοχική εκτέλεση αυτών των συναλλαγών. Προλαμβάνει "βρώμικες" αναγνώσεις, μη επαναλαμβανόμενες αναγνώσεις και φαντάσματα. Μπορεί να μειώσει την απόδοση λόγω κλειδώματος.
Σε διαφορετικά συστήματα διαχείρισης βάσεων δεδομένων (DBMS), μπορεί να υπάρχουν δικές τους υλοποιήσεις και χαρακτηριστικά των επιπέδων απομόνωσης, καθώς και πρόσθετα επίπεδα. Για παράδειγμα, στο MySQL InnoDB, το προεπιλεγμένο επίπεδο είναι το Repeatable Read.