ΗΥ360 Αρχεία και Βάσεις εδοµένων ιδάσκων:. Πλεξουσάκης Tutorial B-Trees, B+Trees Μπαριτάκης Παύλος 2018-2019
Ιδιότητες B-trees Χρήση για μείωση των προσπελάσεων στον δίσκο Επέκταση των Binary Search Trees Ένα B-tree τάξεως m έχει τις παρακάτω ιδιότητες: 1. Κάθε κόμβος έχει max m παιδιά(pointers) και m-1 κλειδιά(keys) 2. Κάθε non-leaf κόμβος(node) έχει min "m" /2 παιδιά 3. Κάθε non-leaf κόμβος με k παιδιά έχει k-1 κλειδιά 4. Η ρίζα έχει min 2 παιδιά και 1 κλειδί (αν δεν είναι leaf) 5. Όλα τα φύλλα εμφανίζονται στο ίδιο επίπεδο Τα κλειδιά σε κάθε εσωτερικό κόμβο λειτουργούν ως όρια για το διαχωρισμό σε υποδέντρα * Τάξη Β tree = Πόσα παιδιά μπορεί να έχει ένας εσωτερικός κόμβος
Ιδιότητες B-trees Παράδειγμα B-Tree Τάξη m = 4 Αριθμός Παιδιών (pointers) ανά κόμβο (κανόνας 3): max 4, min 2 Αριθμός Κλειδιών (keys) ανά κόμβο (κανόνας 3): max 3, min 1 * Pointers : Ξεκινάνε από το κάθε διαχωριστικό με τα βελάκια Keys: Θέσεις - κουτάκια που υπάρχουν σε κάθε κόμβο
Ενέργειες σε B-Trees Αναζήτηση Κάνω αναζήτηση για μια εγγραφή με κλειδί k, βρίσκω ένα μονοπάτι από τη ρίζα ως κάποιο φύλλο όπου βρίσκεται (αν βρίσκεται) η επιθυμητή εγγραφή Εισαγωγή Κάνω εισαγωγή μιας εγγραφής με κλειδί k Διαγραφή Διαγράφω μια εγγραφή με κλειδί k
Β+ Trees Υποκατηγορία των B(alanced) Trees B-Trees: Αποθηκεύουν κλειδιά και δεδομένα σε όλους τους κόμβους B+Trees: Αποθηκεύουν τα δεδομένα τους μόνο στα φύλλα
Ιδιότητες Β+ trees Ενα B+ tree κατασκευάζεται με βάση μια παράμετρο n, η οποία υποδηλώνει τη μέγιστη χωρητικότητα ενός κόμβου. Κάθε B+ tree έχει τις παρακάτω ιδιότητες: 1. Ο αριθμός n+1 ονομάζεται τάξη ή fan-out του δέντρου 2. Κάθε κόμβος πρέπει να είναι πάντα τουλάχιστον γεμάτος κατά 50% (no less than half full) 3. Όλα τα φύλλα εμφανίζονται στο ίδιο επίπεδο
Ιδιότητες Β+ trees a) A node with two children; b) a node with three children; c) a node with m children
Ιδιότητες Β+ trees Internal (non-root) Leaf (non-root) Max Pointers Max Keys n+1 n n+1 n Min Pointers -> Data Min keys Root n+1 n 2(*) 1
Αναζήτηση σε B+ Trees Αναζήτηση(Lookup) εγγραφής με κλειδί k 1. Ξεκινάω από τη ρίζα και βρίσκω το μεγαλύτερο κλειδί k1 τέτοιο ώστε k1 k k1+1 2. Ακολουθώ τον pointer p 1 +1 μέχρι να φτάσω σε φύλλο (leaf) 3. Αν k= k 1 κι έχω φτάσει σε φύλλο(leaf) τότε ακολουθώ τον p 1 για να βρω την εγγραφή
Παράδειγμα: Αναζήτηση σε B+ Trees
Παράδειγμα : Αναζήτηση σε B+ Trees
Παράδειγμα : Αναζήτηση σε B+ Trees
Παράδειγμα : Αναζήτηση σε B+ Trees
Εισαγωγή σε B+ Trees Αλγόριθμος Ενέργειες Εισαγωγής για B+ Trees Leaf Page FULL? Index Page FULL? Ενέργειες - Βήματα NO NO Τοποθέτησε το record σε ταξινομημένη θέση στο κατάλληλο leaf page. YES NO 1. Χώρισε το leaf page 2. Πάρε το μεσαίο κλειδί(middle key) από το leaf page και τοποθέτησέ το σε ταξινομημένη θέση στο index page 3. Το αριστερό leaf page περιέχει εγγραφές(records) με κλειδιά μικρότερα από το μεσαίο κλειδί 4. Το δεξί leaf page περιέχει εγγραφές(records) με κλειδί ίσο(=) ή μεγαλύτερο(>) από το μεσαίο κλειδί YES YES 1. Χώρισε το leaf page 2. Εγγραφές με κλειδιά < μεσαίου κλειδιού τοποθετούνται στο αριστερό leaf page 3. Εγγραφές με κλειδιά >= μεσαίου κλειδιού τοποθετούνται στο δεξιό leaf page 1. Χώρισε το index page 2. Εγγραφές με κλειδιά < μεσαίου κλειδιού τοποθετούνται στο αριστερό index page 3. Εγγραφές με κλειδιά >= μεσαίου κλειδιού τοποθετούνται στο δεξιό index page 4. Το μεσαίο κλειδί (middle key) τοποθετείται σε επόμενο index page ψηλότερου επιπέδου
Διαγραφή σε B+ Trees Αλγόριθμος Ενέργειες Διαγραφής για B+ Trees Leaf Page Bellow Fill Factor Index Page Bellow Fill Factor Ενέργειες - Βήματα NO NO 1. Διαγράφουμε την εγγραφή(record) από το leaf page 2. Μετακινούμε - Ταξινομούμε τα κλειδιά κατά αύξουσα σειρά για να καλύψουμε το κενό της διαγραφής 3. Αν το κλειδί από το διαγραμμένο record εμφανίζεται στο index page, χρησιμοποιούμε το επόμενο κλειδί για να αντικαταστήσουμε το διαγραμμένο YES NO 1. Γίνεται συνένωση του leaf page με τα συγγενικά του (γειτονικοί κόμβοι με ίδιο parent κόμβο με αυτού πραγματοποιείται η διαγραφή) 2. Αλλάζουμε κατάλληλα το index page για να πραγματοποιηθεί η αλλαγή από την διαγραφή YES YES 1. Γίνεται συνένωση του leaf page με τα συγγενικά του (γειτονικοί κόμβοι με ίδιο parent κόμβο με αυτού πραγματοποιείται η διαγραφή) 2. Αλλάζουμε κατάλληλα το index page για να πραγματοποιηθεί η αλλαγή από την διαγραφή 3. Γίνεται συνένωση του index page με τα συγγενικά του(γειτονικοί κόμβοι με ίδιο parent κόμβο με αυτού πραγματοποιείται η διαγραφή) Συνεχίζουμε να κάνουμε συνένωση του index page μέχρι να φτάσουμε σε page που να περιέχει το σωστό record το οποίο θα τοποθετηθεί στην θέση που χρειάζεται, διαφορετικά έχουμε φτάσει στο root page.
Άσκηση σε Β+ Τree Κατασκευάστε ένα Β+ δέντρο για το ακόλουθο σύνολο από τιμές κλειδιών όταν ο αριθμός των εγγραφών που χωράνε σε κάθε κόμβο είναι 6. {2, 3, 5, 7, 11, 17, 19, 23, 29, 31} Στη συνέχεια δείξτε πώς αλλάζει το δέντρο μετά από 1. Την εισαγωγή των 9, 10, 8 2. Τη διαγραφή των 23, 19
Άσκηση σε Β+ Τree Λύση: {2, 3, 5, 7, 11, 17, 19, 23, 29, 31}
Άσκηση σε Β+ Τree Επεξήγηση Λύσης: {2, 3, 5, 7, 11, 17, 19, 23, 29, 31} Βήμα 1o: 2 Βήμα 2o: Βήμα 3o: 2 3 2 3 5
Άσκηση σε Β+ Τree Επεξήγηση Λύσης: {2, 3, 5, 7, 11, 17, 19, 23, 29, 31} Βήμα 4o: 2 3 5 7 Βήμα 5o: 2 3 5 7 11
Άσκηση σε Β+ Τree Επεξήγηση Λύσης: {2, 3, 5, 7, 11, 17, 19, 23, 29, 31} Βήμα 6o (middle key =7): 7 2 3 5 7 11 17
Άσκηση σε Β+ Τree Επεξήγηση Λύσης: {2, 3, 5, 7, 11, 17, 19, 23, 29, 31} Βήμα 7o: 7 2 3 5 7 11 17 19
Άσκηση σε Β+ Τree Επεξήγηση Λύσης: {2, 3, 5, 7, 11, 17, 19, 23, 29, 31} Βήμα 8o: 7 2 3 5 7 11 17 19 23
Άσκηση σε Β+ Τree Επεξήγηση Λύσης: {2, 3, 5, 7, 11, 17, 19, 23, 29, 31} Βήμα 9o (middle key= 19) : 7 19 2 3 5 19 23 29 7 11 17
Άσκηση σε Β+ Τree Επεξήγηση Λύσης: {2, 3, 5, 7, 11, 17, 19, 23, 29, 31} Βήμα 10o τελικό B+ Tree: 7 19 2 3 5 19 23 29 31 7 11 17
Άσκηση σε Β+ Τree Εισαγωγή 9 Εισαγωγή 10
Άσκηση σε Β+ Τree Εισαγωγή 8 Διαγραφή 23
Διαγραφή 19 Άσκηση σε Β+ Τree
B-Trees, Β+ Trees End of Slides