ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΠΡΟΧΩΡΗΜΕΝΑ ΘΕΜΑΤΑ ΒΑΣΕΩΝ ΔΕΔΟΜΕΝΩΝ Τ. Σελλής ΦΘΙΝΟΠΩΡΟ 2008 Λύση ΑΣΚΗΣΗΣ #2 ΕΡΩΤΗΜΑ 1: ΔΕΔΟΜΕΝΩΝ ΕΠΕΞΕΡΓΑΣΙΑ ΕΡΩΤΗΣΕΩΝ ΣΕ ΚΑΤΑΝΕΜΗΜΕΝΕΣ ΒΑΣΕΙΣ Θεωρούμε τις ακόλουθες σχέσεις, οι οποίες ανήκουν στην κατανεμημένη βάση δεδομένων μίας εταιρίας: EMP (EID:int, ENAME:char(40), EADDRESS:char(40), EAGE:int, ESALARY:real, DID:int) DEP (DID:int, DNAME:char(16), DLOCATION:char(30)) Στις παραπάνω σχέσεις, για κάθε υπάλληλο καταγράφεται το όνομά του, η διεύθυνσή του, η ηλικία του, ο μισθός του και ο κωδικός του τμήματος στο οποίο ανήκει. Αντίστοιχα, στα τμήματα, καταγράφεται το όνομα και η τοποθεσία του τμήματος. Επίσης, για το κάθε πεδίο, δίνεται ο τύπος. Κάθε ακέραιος (int) έχει μέγεθος 4bytes κάθε πραγματικός (real) 8bytes και κάθε χαρακτήρας μίας συμβολοσειράς (char()) 1byte. Η σχέση EMP περιέχει 2000 σελίδες και η DEP 50 σελίδες. Το μέγεθος μίας σελίδας είναι bytes. Θεωρούμε το κόστος του κάθε Ι/Ο μηδενικό. Το κόστος αποστολής μίας σελίδας είναι Ts = 40 Td, το κόστος μίας επιλογής ή προβολής είναι ίσο με το μέγεθος της σχέσης σε σελίδες ενώ το κόστος ενός join ισούται με 3 (Μ + Ν) Τd, όπου Μ, Ν τα μεγέθη των σχέσεων σε σελίδες. Η σχέση EMP βρίσκεται στην Αθήνα και η σχέση DEP στη Θεσσαλονίκη. Από το Ηράκλειο, τίθεται η παρακάτω ερώτηση: SELECT FROM WHERE ENAME, DNAME EMP, DEP DLOCATION= Ηράκλειο AND EMP.DID=DEP.DID Αν θεωρήσουμε ότι το 20% των τμημάτων βρίσκονται στο Ηράκλειο και το 30% των υπαλλήλων βρίσκονται σε τμήματα του Ηρακλείου, βρείτε το κόστος της απάντησης της ερώτησης με καθένα από τους παρακάτω τρόπους: α) Υπολόγισε το αποτέλεσμα στο Ηράκλειο. β) Υπολόγισε το αποτέλεσμα με semi-join στη Θεσσαλονίκη και στείλε το στο Ηράκλειο. γ) Υπολόγισε το αποτέλεσμα χωρίς semi-join στην Αθήνα και στείλε το στο Ηράκλειο. Λύση α) 1. Μεταφορά της EMP στο Ηράκλειο: 2000*40Τd = 80000 Τd 2. Μεταφορά της DEP στο Ηράκλειο: 50*40 Τd = 2000 Τ d 1
3. Επιλογή των πλειάδων της EMP για τις οποίες DLOCATION= Ηράκλειο : 50*1 Τd = 50 Τd Αφού μόνο το 20% των τμημάτων βρίσκονται στο Ηράκλειο, οι σελίδες που θα προκύψουν από την πράξη της επιλογής για τη σχέση DEP θα είναι 50 * 0,2 = 10 σελίδες. 4. Join μεταξύ των σχέσεων EMP και DEP: 3*(2000 + 10) Τd = 6030 Τd Αφού μόνο το 30% των υπαλλήλων βρίσκονται σε τμήματα του Ηρακλείου, το μέγεθος του join 2000 που προκύπτει είναι: 0,3 = 6000 εγγραφές 100 6000 (100 + 50 4) Σε σελίδες: = 876 σελίδες 5. Προβολή των ENAME, DNAME: 876 * 1 Τd = 876 Τd Άρα, το συνολικό κόστος είναι: 80000 Τd +2000 Τd +50 Τd +6030 Τd +876 Τd = 88956 Τd β) 1. Επιλογή των πλειάδων της EMP για τις οποίες DLOCATION= Ηράκλειο : 50*1 Τd = 50 Τd Αφού μόνο το 20% των τμημάτων βρίσκονται στο Ηράκλειο, οι σελίδες που θα προκύψουν από την πράξη της επιλογής για τη σχέση DEP θα είναι 50 * 0,2 = 10 σελίδες. 2. Προβολή του DID της σχέσης DEP: 10 * 1 Τd = 10 Τd 10 Το μέγεθος της σχέσης που προκύπτει είναι: = 200 50 200 4 Σε σελίδες: = 0,8 1σελίδα εγγραφές 3. Μεταφορά της προβολής της DEP στην Αθήνα: 1 * 40 Τd = 40 Τd 4. Semi-join μεταξύ των σχέσεων EMP DEP: 3*(2000 + 1) Τd = 6003 Τd Αφού μόνο το 30% των υπαλλήλων βρίσκονται σε τμήματα του Ηρακλείου, το μέγεθος του join 2000 που προκύπτει είναι: 0,3 = 6000 εγγραφές 100 6000 100 Σε σελίδες: = 600 σελίδες 5. Μεταφορά της EMP DEP στη Θεσσαλονίκη: 600 * 40 Τd = 24000 Τd 6. Join μεταξύ της EMP DEP και της σχέσης DEP: 3*(600 + 10) Τd = 1830 Τ d Οι εγγραφές που περιέχει η EMP DEP είναι 6000 και μεταφέρονται όλες στο join. Το 6000 (100 + 50 4) μέγεθος του join που προκύπτει είναι σε σελίδες: = 876 σελίδες 7. Προβολή των ENAME, DNAME: 876 * 1 Τd = 876 Τd 6000 (40 + 16) Το μέγεθος της τελικής σχέσης θα είναι: = 336 σελίδες 2
8. Μεταφορά της τελικής σχέσης στο Ηράκλειο: 336 * 40 Τd = 13440 Τd Άρα, το συνολικό κόστος είναι: 50 Τd +10 Τd +40 Τd +6003 Τd +24000 Τd +1830 Τd + 876 Τd +13440 Τd = 46249 Τd γ) 1. Μεταφορά της DEP στην Αθήνα: 50*40 Τd = 2000 Τd 2. Επιλογή των πλειάδων της EMP για τις οποίες DLOCATION= Ηράκλειο : 50*1 Τd = 50 Τd Αφού μόνο το 20% των τμημάτων βρίσκονται στο Ηράκλειο, οι σελίδες που θα προκύψουν από την πράξη της επιλογής για τη σχέση DEP θα είναι 50 * 0,2 = 10 σελίδες 3. Join μεταξύ των σχέσεων EMP και DEP: 3*(2000 + 10) Τd = 6030 Τd Αφού μόνο το 30% των υπαλλήλων βρίσκονται σε τμήματα του Ηρακλείου, το μέγεθος του join 2000 που προκύπτει είναι: 0,3 = 6000 εγγραφές 100 6000 (100 + 50 4) Σε σελίδες: = 876 σελίδες 4. Προβολή των ENAME, DNAME: 876 * 1 Τd = 876 Τd 6000 (40 + 16) Το μέγεθος της τελικής σχέσης θα είναι: = 336 σελίδες 5. Μεταφορά της τελικής σχέσης στο Ηράκλειο: 336 * 40 Τd = 13440 Τd Άρα, το συνολικό κόστος είναι: 2000 Τd +50 Τd + 6030 Τd + 876 Τd +13440 Τd = 22396 Τd Σημειώνουμε ότι η παραπάνω λύση είναι ενδεικτική, από την άποψη ότι θα μπορούσαν να έχουν γίνει κάποιες βελτιστοποιήσεις οι οποίες θα άλλαζαν τις τιμές των αποτελεσμάτων. ΕΡΩΤΗΜΑ 2: ΔΙΑΧΕΙΡΙΣΗ ΑΝΤΙΓΡΑΦΩΝ ΣΕ ΚΑΤΑΝΕΜΗΜΕΝΕΣ ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Θεωρούμε ένα κατανεμημένο Σύστημα Διαχείρισης Βάσεων Δεδομένων με τέσσερις κόμβους Μ, Ν1, Ν2 και Ν3 και δύο αντικείμενα* που μας ενδιαφέρουν Χ, Υ. Ο κόμβος Μ είναι ο κόμβος με τα πρωτεύοντα αντίγραφα και για τα δύο αντικείμενα. Αντίγραφα του Χ υπάρχουν και στους κόμβους Ν1, Ν3, ενώ αντίγραφα του Υ υπάρχουν σε όλους τους κόμβους. Έστω ότι στο συγκεκριμένο σύστημα μπορούν να υλοποιηθούν οι ακόλουθες στρατηγικές για τον χειρισμό των updates: 1. Αλγόριθμος 1: Οι εγγραφές πραγματοποιούνται υποχρεωτικά πρώτα τον κόμβο με το πρωτεύον αντίγραφο και μεταφέρονται αμέσως στον κόμβο που ζήτησε να γίνει η εγγραφή. Στο τέλος της δοσοληψίας μοιράζονται στους υπόλοιπους κόμβους. Η ανάγνωση ενός αντικειμένου μπορεί να πραγματοποιηθεί τοπικά σε κάθε κόμβο. 3
2. Αλγόριθμος 2: Όλοι οι κόμβοι εκτός από τον κόμβο με το πρωτεύον αντίγραφο έχουν αντίγραφα με δικαίωμα μόνο για ανάγνωση (read only). Οι εγγραφές (updates) πραγματοποιούνται πρώτα στον κόμβο με το πρωτεύον αντίγραφο και κατευθείαν μοιράζονται στους υπόλοιπους κόμβους. 3. Αλγόριθμος 3: Κάθε κόμβος έχει τον δικό του διαχειριστή κλειδωμάτων. Οι εγγραφές (και φυσικά και οι αναγνώσεις) μπορούν να γίνουν τοπικά σε οποιονδήποτε κόμβο έχει ένα αντίγραφο και κατευθείαν μοιράζονται στους υπόλοιπους κόμβους. 4. Αλγόριθμος 4: Κάθε κόμβος έχει τον δικό του διαχειριστή κλειδωμάτων. Οι εγγραφές (και φυσικά και οι αναγνώσεις) μπορούν να γίνουν τοπικά σε οποιονδήποτε κόμβο έχει ένα αντίγραφο και μοιράζονται στους υπόλοιπους κόμβους στο τέλος της δοσοληψίας. Έστω ότι πρέπει να εκτελεστεί στον κόμβο Ν1 η δοσοληψία: T = W(X) R(X) R(Y) W(Y). Για κάθε μία από τις στρατηγικές (1-4) για τον χειρισμό updates, δώστε όλα τα βήματα της εκτέλεσης της δοσοληψίας Τ (αιτήσεις για κλειδώματα, πράξεις στα δεδομένα, ανταλλαγή δεδομένων ανάμεσα στους κόμβους), χωρίς να λαμβάνετε υπόψιν σας τα UNLOCK. Επίσης, αναλύστε εν συντομία τα πιθανά προβλήματα που μπορεί να έχει η κάθε στρατηγική, ειδικότερα στο θέμα της συνέπειας της βάσης. * Ως αντικείμενα μπορούμε να θεωρήσουμε απλές εγγραφές, σελίδες ή ακόμα και ολόκληρα τμήματα (segments) κάποιας σχέσης. Λύση 1. Αλγόριθμος 1: (b) Ο κόμβος Ν1 ζητάει από τον κόμβο Μ να κάνει W(X). (c) Ο κόμβος M κλειδώνει το πρωτεύον αντίγραφο του X. με X_LOCK. (d) Η T κλειδώνει το X με X_LOCK στον Ν1. (d) W(X) στον M. (e) Ο κόμβος M στέλνει update στον Ν1 W(X) στον Ν1. (f) Ο κόμβος M ενημερώνει τη δοσοληψία T στον κόμβο Ν1 ότι το W(X) ολοκληρώθηκε επιτυχώς. (g) R(X) στον κόμβο Ν1. (h) Η T κλειδώνει τοπικά (στον κόμβο Ν1) το Υ με S_LOCK και εκτελεί το R(Y). (i) Ο κόμβος Ν1 ζητάει από τον κόμβο Μ να κάνει W(Υ). (j) Ο κόμβος M κλειδώνει το πρωτεύον αντίγραφο του Υ με X_LOCK. (k) Η T κλειδώνει το Y με X_LOCK στον Ν1. (l) W(Υ) στον κόμβο M. (m) Ο κόμβος M στέλνει update στον Ν1 W(Y) στον Ν1. (n) Ο κόμβος M ενημερώνει τη δοσοληψία T στον κόμβο Ν1 ότι το W(Υ) ολοκληρώθηκε επιτυχώς. (n) Η T κάνει commit στον κόμβο Ν1. (o) Ο κόμβος M στέλνει όλα τα updates στους υπόλοιπους κόμβους (W(X) στον Ν3 και W(Y) στους Ν2 και Ν3). Ο αλγόριθμος 1 εγγυάται ότι δεν θα υπάρξουν ασυνέπειες στα δεδομένα του κόμβου στον οποίο γίνεται η δοσοληψία και στον κόμβο με τα πρωτεύοντα αντίγραφα. Παρόλα αυτά, μέχρι το τέλος της δοσοληψίας, οι υπόλοιποι κόμβοι μπορεί να μην έχουν την πιο πρόσφατη τιμή. Όμως, έχει πολύ μεγάλο κόστος εκτέλεσης καθώς πρέπει να γίνονται update όλοι οι κόμβοι με αντίγραφα, καθώς επίσης, ο φόρτος στον 4
κόμβο με το πρωτεύον αντίγραφο μπορεί να είναι πολύ μεγάλος και να μετατραπεί σε bottleneck για το σύστημα. 2. Αλγόριθμος 2: (b) Ο κόμβος Ν1 ζητάει από τον κόμβο Μ να κάνει W(X). (c) Ο κόμβος M κλειδώνει το πρωτεύον αντίγραφο του X. με X_LOCK. (d) Η T κλειδώνει το X με X_LOCK στον Ν1 και στον Ν3. (d) W(X) στον M. (e) Ο κόμβος M στέλνει update στους Ν1, Ν3 W(X) στον Ν1, W(X) στον Ν3. (f) Ο κόμβος M ενημερώνει τη δοσοληψία T στον κόμβο Ν1 ότι το W(X) ολοκληρώθηκε επιτυχώς. (g) R(X) στον κόμβο Ν1. (h) Η T κλειδώνει τοπικά (στον κόμβο Ν1) το Υ με S_LOCK και εκτελεί το R(Y). (i) Ο κόμβος Ν1 ζητάει από τον κόμβο Μ να κάνει W(Υ). (j) Ο κόμβος M κλειδώνει το πρωτεύον αντίγραφο του Υ με X_LOCK. (k) Η T κλειδώνει το Y με X_LOCK στους Ν1, Ν2, Ν3. (l) W(Υ) στον κόμβο M. (m) Ο κόμβος M στέλνει update στους Ν1, Ν2, Ν3 W(Υ) στον Ν1, W(Υ) στον Ν2, W(Υ) στον Ν3. (n) Ο κόμβος M ενημερώνει τη δοσοληψία T στον κόμβο Ν1 ότι το W(Υ) ολοκληρώθηκε επιτυχώς. (n) Η T κάνει commit στον κόμβο Ν1. Ο αλγόριθμος 2 εγγυάται ότι δεν θα υπάρξουν ασυνέπειες στα δεδομένα κανενός κόμβου, αφού, στην ουσία, οι εγγραφές γίνονται ταυτόχρονα σε όλους τους κόμβους.. Όμως, ο φόρτος στον κόμβο με το πρωτεύον αντίγραφο είναι μεγαλύτερος από του αλγορίθμου 1, αφού οι ενημερώσεις γίνονται ταυτόχρονα για όλους τους κόμβους, ενώ στον αλγόριθμο 1, μοιράζονται ενδιάμεσα και στο τέλος της δοσοληψίας. 3. Aλγόριθμος 3: (b) Η T κλειδώνει το τοπικό αντίγραφο του Χ στον κόμβο Ν1 με Χ_LOCK. (c) W(X) στον κόμβο Ν1. (d) Ο κόμβος N1 στέλνει update στους M, Ν3 W(X) στον M, W(X) στον Ν3. (e) R(X) στον κόμβο Ν1. (f) Η T κλειδώνει το τοπικό αντίγραφο του Υ στον κόμβο Ν1 με S_LOCK. (g) R(Y) στον κόμβο Ν1. (h) Η T κλειδώνει το τοπικό αντίγραφο του Υ στον κόμβο Ν1 με Χ_LOCK. (i) W(Υ) στον κόμβο Ν1. (j) Ο κόμβος Ν1στέλνει update στους M, Ν2, Ν3 W(Υ) στον M, W(Υ) στον Ν2, W(Υ) στον Ν3. (k) Η T κάνει commit στον κόμβο Ν1. Με τη συγκεκριμένη στρατηγική ο κάθε κόμβος μπορεί να εκτελεί πλήρως τις δοσοληψίες που του έρχονται, ενημερώνοντας κατευθείαν τους υπόλοιπους κόμβους, χωρίς να εμπλέκειτον κόμβο μξε τα πρωτεύοντα αντίγραφα. Έτσι, ο φόρτος κατανέμεται ισομερώς σε όλους τους κόμβους, αλλά και δεν εμφανίζονται προβλήματα ασυνέπειας στα δεδομένα, αφού οι ανανεώσεις των αντιγράφων γίνονται αμέσως μετά της εγγραφή στον κόμβο όπου γίνεται η δοσοληψία. 5
4. Αλγόριθμος 4: (b) Η T κλειδώνει το τοπικό αντίγραφο του Χ στον κόμβο Ν1 με Χ_LOCK. (c) W(X) στον κόμβο Ν1. (d) R(X) στον κόμβο Ν1. (e) Η T κλειδώνει το τοπικό αντίγραφο του Υ στον κόμβο Ν1 με S_LOCK. (f) R(Y) στον κόμβο Ν1. (g) Η T κλειδώνει το τοπικό αντίγραφο του Υ στον κόμβο Ν1 με Χ_LOCK. (h) W(Υ) στον κόμβο Ν1. (i) Η T κάνει commit στον κόμβο Ν1 και ελευθερώνει όλα τα τοπικά κλειδώματα για τα X,Y. (j) Ο κόμβος Ν1 στέλνει όλες τις αλλαγές στους υπόλοιπους κόμβους. Με τη συγκεκριμένη στρατηγική ο κάθε κόμβος μπορεί να εκτελεί πλήρως τις δοσοληψίες που του έρχονται (οδηγώντας σε πολύ καλούς χρόνους απόκρισης εάν δεν ενοχλούν την εφαρμογή πιθανές ασυνέπειες στις τιμές των δεδομένων) και ο φόρτος κατανέμεται ισομερώς σε όλους τους κόμβους. Όμως, οδηγεί με μεγάλη πιθανότητα σε ασυνέπειες στα δεδομένα, αφού οι ανανεώσεις γίνονται στο τέλος της δοσοληψίας. 6