Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1 Ευρετήρια
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 2 Ευρετήρια Πρωτεύον ευρετήριο (primary index): ορισμένο στο κλειδί διάταξης του αρχείου Δευτερεύον ευρετήριο (secondary index): ορισμένο σε πεδία διαφορετικά του κλειδιού διάταξης Ευρετήριο συστάδων (clustering index): ορισμένο στο πεδίο διάταξης το οποίο όμως δεν είναι κλειδί Η δομή προσπέλασης (access path) συνήθως ορίζεται σε ένα πεδίο του αρχείου που λέγεται πεδίο ευρετηριοποίησης (indexing field) Πόσα ευρετήρια σε ένα αρχείο δεδομένων μπορεί να έχουμε ;
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 3 Ευρετήρια Πυκνό ευρετήριο: μια καταχώρηση για κάθε εγγραφή του δίσκου Μη πυκνό ευρετήριο
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 4 Πρωτεύον Ευρετήριο Πρωτεύον ευρετήριο (primary index): ορισμένο στο κλειδί διάταξης του αρχείου Για κάθε block του αρχείου (μη πυκνό ευρετήριο) η εγγραφή i του ευρετηρίου είναι της μορφής ( ) όπου: Κ(i): η τιμή του πρωτεύοντος κλειδιού της πρώτης εγγραφής του block (άγκυρα του block) P(i): δείκτης προς το block
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 5 Πρωτεύον Ευρετήριο Το ευρετήριο αρχείου είναι ένα διατεταγμένο αρχείο με σταθερού μήκους εγγραφές Το πρωτεύον ευρετήριο είναι ένα μη πυκνό ευρετήριο Το μέγεθος του αρχείου ευρετηρίου είναι μικρότερο από του αρχείου δεδομένων. Παράδειγμα: Έστω διατεταγμένο αρχείο με r = εγγραφές, μέγεθος block B = 1024 bytes, σταθερού μεγέθους εγγραφές μεγέθους R = 100 bytes, όπου το πεδίο κλειδιού διάταξης έχει μέγεθος V = 9 bytes, μη εκτεινόμενη καταχώρηση. Κατασκευάζουμε πρωτεύον ευρετήριο, μέγεθος δείκτη block P = 6 bytes Μέγεθος αρχείου δεδομένων: blocks Μέγεθος αρχείου ευρετηρίου: 45 blocks
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 6 Πρωτεύον Ευρετήριο Αναζήτηση Δυαδική αναζήτηση στο πρωτεύον ευρετήριο Ανάγνωση του block από το αρχείο δεδομένων Παράδειγμα: Έστω διατεταγμένο αρχείο με r = εγγραφές, μέγεθος block B = 1024 bytes, σταθερού μεγέθους εγγραφές μεγέθους R = 100 bytes, όπου το πεδίο κλειδιού διάταξης έχει μέγεθος V = 9 bytes, μη εκτεινόμενη καταχώρηση. Κατασκευάζουμε πρωτεύον ευρετήριο, μέγεθος δείκτη block P = 6 bytes Μέγεθος αρχείου δεδομένων: blocks - Μέγεθος αρχείου ευρετηρίου: 45 blocks Αναζήτηση χωρίς ευρετήριο: log = 12 blocks Αναζήτηση με ευρετήριο: log 45 + 1 = 7 blocks
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 7 Πρωτεύον Ευρετήριο Εισαγωγή εγγραφής αλλαγές και στο πρωτεύον ευρετήριο μη διατεταγμένο αρχείο υπερχείλισης συνδεδεμένη λίστα εγγραφών υπερχείλισης Διαγραφή εγγραφής αλλαγές και στο πρωτεύον ευρετήριο χρήση σημαδιών διαγραφής
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 8 Ευρετήριο Συστάδων Ευρετήριο συστάδων (clustering index): ορισμένο στο πεδίο διάταξης το οποίο όμως δεν είναι κλειδί Υπάρχει μια εγγραφή για κάθε διακεκριμένη τιμή του πεδίου διάταξης (συστάδας) του αρχείου που περιέχει: την τιμή αυτή ένα δείκτη προς το πρώτο block του αρχείου δεδομένων που περιέχει μια εγγραφή με την τιμή αυτή στο πεδίο συστάδας
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 9 Ευρετήριο Συστάδων Το μέγεθος του αρχείου ευρετηρίου είναι μικρότερο από του αρχείου δεδομένων. Παράδειγμα: Έστω διατεταγμένο αρχείο με r = εγγραφές, μέγεθος block B = 1024 bytes, σταθερού μεγέθους εγγραφές μεγέθους R = 100 bytes, μη εκτεινόμενη καταχώρηση, όπου το πεδίο διάταξης έχει μέγεθος V = 9 bytes και υπάρχουν 1000 διαφορετικές τιμές και οι εγγραφές είναι ομοιόμορφα κατανεμημένες ως προς τις τιμές αυτές. Υποθέτουμε ότι χρησιμοποιούνται άγκυρες block, κάθε νέα τιμή του πεδίου διάταξης αρχίζει στην αρχή ενός νέου block. Κατασκευάζουμε ευρετήριο συστάδων, μέγεθος δείκτη block P = 6 bytes Μέγεθος αρχείου δεδομένων: blocks Μέγεθος ευρετηρίου συστάδων: 15 blocks
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 10 Ευρετήριο Συστάδων Αναζήτηση Δυαδική αναζήτηση στο ευρετήριο Ανάγνωση block από το αρχείο δεδομένων Μέγεθος αρχείου δεδομένων: blocks - Μέγεθος αρχείου ευρετηρίου: 15 blocks Αναζήτηση χωρίς ευρετήριο: log + ταιριάσματα ( = 3) 15 blocks Αναζήτηση με ευρετήριο: log 15 + 3 = 7 blocks Παράδειγμα: Έστω διατεταγμένο αρχείο με r = εγγραφές, μέγεθος block B = 1024 bytes, σταθερού μεγέθους εγγραφές μεγέθους R = 100 bytes, μη εκτεινόμενη καταχώρηση, όπου το πεδίο διάταξης έχει μέγεθος V = 9 bytes και υπάρχουν 1000 διαφορετικές τιμές και οι εγγραφές είναι ομοιόμορφα κατανεμημένες ως προς τις τιμές αυτές. Υποθέτουμε ότι χρησιμοποιούνται άγκυρες block, κάθε νέα τιμή του πεδίου διάταξης αρχίζει στην αρχή ενός νέου block. Κατασκευάζουμε ευρετήριο συστάδων, μέγεθος δείκτη block P = 6 bytes
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 11 Δευτερεύον Ευρετήριο Υπάρχει μια εγγραφή για κάθε εγγραφή του αρχείου που περιέχει: την τιμή του δευτερεύοντος κλειδιού για αυτήν την εγγραφή ένα δείκτη προς το block (ή την εγγραφή) του αρχείου δεδομένων που περιέχει την εγγραφή με την τιμή αυτή Δευτερεύον ευρετήριο (secondary index): ορισμένο σε πεδία διαφορετικά του κλειδιού διάταξης Περίπτωση 1: Το πεδίο ευρετηριοποίησης είναι κλειδί (καλείται και δευτερεύον κλειδί)
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 12 Δευτερεύον Ευρετήριο Το ευρετήριο αρχείου είναι ένα διατεταγμένο αρχείο με σταθερού μήκους εγγραφές Το δευτερεύον ευρετήριο είναι ένα πυκνό ευρετήριο Το μέγεθος του δευτερεύοντος ευρετηρίου είναι μικρότερο από του αρχείου δεδομένων (αν και μεγαλύτερο από το πρωτεύον). Παράδειγμα: Έστω αρχείο με r = εγγραφές, μέγεθος block B = 1024 bytes, σταθερού μεγέθους εγγραφές μεγέθους R = 100 bytes, μη εκτεινόμενη καταχώρηση, όπου το πεδίο κλειδιού έχει μέγεθος V = 9 bytes αλλά δεν είναι πεδίο διάταξης,. Κατασκευάζουμε δευτερεύον ευρετήριο, μέγεθος δείκτη block P = 6 bytes Μέγεθος αρχείου δεδομένων: blocks Μέγεθος αρχείου ευρετηρίου: 442 blocks45 για πρωτεύον
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 13 Δευτερεύον Ευρετήριο Αναζήτηση Δυαδική αναζήτηση στο δευτερεύον ευρετήριο Ανάγνωση του block από το αρχείο δεδομένων Μέγεθος αρχείου δεδομένων: blocks - Μέγεθος αρχείου ευρετηρίου: 442 blocks Αναζήτηση χωρίς ευρετήριο: 3.000/2 = 1500 blocks Αναζήτηση με ευρετήριο: log 442 + 1 = 10 blocks Παράδειγμα: Έστω αρχείο με r = εγγραφές, μέγεθος block B = 1024 bytes, σταθερού μεγέθους εγγραφές μεγέθους R = 100 bytes, μη εκτεινόμενη καταχώρηση, όπου το πεδίο κλειδιού έχει μέγεθος V = 9 bytes αλλά δεν είναι πεδίο διάταξης,. Κατασκευάζουμε δευτερεύον ευρετήριο, μέγεθος δείκτη block P = 6 bytes Για πρωτεύον ήταν 45 και 7 blocks αντίστοιχα
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 14 Δευτερεύον Ευρετήριο Περίπτωση 2: Το πεδίο ευρετηριοποίησης δεν είναι κλειδί 1. Πυκνό ευρετήριο: μία καταχώρηση για κάθε εγγραφή 2. Μεταβλητού μήκους εγγραφές με ένα επαναλαμβανόμενο πεδίο για το δείκτη 3. Μία εγγραφή ευρετηρίου για κάθε τιμή του πεδίου ευρετηριοποίσης + ένα ενδιάμεσο επίπεδο για την διαχείριση των πολλαπλών δεικτών Αναζήτηση Δυαδική αναζήτηση στο δευτερεύον ευρετήριο Ανάγνωση του block (ή των blocks) από το ενδιάμεσο επίπεδο Ανάγνωση των blocks (συνήθως τόσα όσες οι εγγραφές που ταιριάζουν) από το αρχείο δεδομένων
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 15 Δευτερεύον Ευρετήριο Εισαγωγή Πολύ απλή αν δεν αφορά εισαγωγή νέας τιμής στο ευρετήριο Εύκολη η λογική διάταξη των εγγραφών με βάση το πεδίο ευρετηριοποίησης Ανακτήσεις με σύνθετες συνθήκες
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 16 Ευρετήρια Πολλών Επιπέδων χτίζουμε ευρετήρια πάνω στα αρχεία ευρετηρίου Έστω ότι το αρχείο ευρετηρίου είναι το πρώτο ή βασικό επίπεδο Έστω ότι ο παράγοντας ομαδοποίησης είναι f 0 και ότι έχει r 1 blocks Το αρχείο είναι διατεταγμένο και το πεδίο διάταξης είναι και κλειδί Δημιουργούμε ένα πρωτεύον ευρετήριο για το ευρετήριο πρώτου επιπέδου - δεύτερο επίπεδο Παράγοντας ομαδοποίησης:f0f0 Αριθμός block (r 1 /f 0 ) Δημιουργούμε ένα πρωτεύον ευρετήριο για το ευρετήριο δεύτερου επιπέδου - τρίτο επίπεδο Παράγοντας ομαδοποίησης:f0f0 Αριθμός block (r 1 /(f 0 ) 2 ) Το f 0 ονομάζεται και παράγοντας διακλάδωσης του ευρετηρίου
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 17 Ευρετήρια Πολλών Επιπέδων Μέχρι πόσα επίπεδα: Μέχρι όλες οι εγγραφές του ευρετηρίου να χωρούν σε ένα block Έστω t κορυφαίο επίπεδο (top level) (r 1 /(f 0 ) τ ) = 1 Παράδειγμα: Έστω αρχείο με r = εγγραφές, μέγεθος block B = 1024 bytes, σταθερού μεγέθους εγγραφές μεγέθους R = 100 bytes, μη εκτεινόμενη καταχώρηση, όπου το πεδίο κλειδιού έχει μέγεθος V = 9 bytes αλλά δεν είναι πεδίο διάταξης,. Κατασκευάζουμε δευτερεύον ευρετήριο, μέγεθος δείκτη block P = 6 bytes Μέγεθος αρχείου δεδομένων: blocks Μέγεθος αρχείου ευρετηρίου πρώτου επιπέδου: 442 blocks Μέγεθος αρχείου ευρετηρίου δεύτερου επιπέδου: (442 / 68) = 7 blocks f 0 = (1024 / (9 + 6)) = 68 Μέγεθος αρχείου ευρετηρίου τρίτου επιπέδου: (7 / 68) = 1 block Άρα t = 3
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 18 Ευρετήρια Πολλών Επιπέδων Αναζήτηση p := διεύθυνση του block του κορυφαίου επιπέδου του ευρετηρίου t := αριθμός επιπέδων του ευρετηρίου for j = t to 1 step -1 do read block με διεύθυνση p του ευρετηρίου στο επίπεδο j αναζήτηση στο block p της εγγραφής i με τιμή Κ j (i) K < K j (i+1) read το block του αρχείου δεδομένων με διεύθυνση p Aναζήτηση στο block p της εγγραφής i με τιμή Κ j (i) K < K j (i+1) Παράδειγμα t + 1 = 4 προσπελάσεις Για το δευτερεύον ήταν 10 και χωρίς ευρετήριο 1500
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 19 Ευρετήρια Πολλών Επιπέδων Εισαγωγή/διαγραφή τροποποιήσεις πολλαπλών ευρετηρίων Δυναμικό πολυεπίπεδο ευρετήριο: Β-δέντρα και Β+-δέντρα
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 20 Δενδρικά Ευρετήρια Τα πολυεπίπεδα ευρετήρια μπορεί να θεωρηθούν ως δέντρα αναζήτησης Κάθε κόμβος (block) έχει f 0 δείκτες και f 0 τιμές κλειδιού
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 21 Δέντρα Αναζήτησης Ένα δέντρο αναζήτησης (search tree) τάξεως p είναι ένα δέντρο τέτοιο ώστε κάθε κόμβος του περιέχει το πολύ p - 1 τιμές αναζήτησης και ρ δείκτες ως εξής Υποθέτουμε ότι οι τιμές αναζήτησης είναι μοναδικές Κ 1 < Κ 2 < … Κ q -1 και για όλες τις τιμές X στα υποδέντρα ισχύει Κ j-1 < X < K j για 1 < j < q, X < K j για j =1, και Κ j -1 < Χ για i = q P 1 K 1 … P j K j … P q-1 K q-1 P q X < K 1 K j-1 < X < K j K q-1 < X
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 22 Δέντρα Αναζήτησης Πεδίο αναζήτησης - αποθήκευση στο δίσκο Ισοζυγισμένο: όλοι οι κόμβοι-φύλλα στο ίδιο επίπεδο Β-δέντρο: ένα δέντρο αναζήτησης που παραμένει ισοζυγισμένο
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 23 Β-δέντρα Ένα Β-δέντρο τάξεως (order) ορίζεται ως εξής: 1. Κάθε εσωτερικός κόμβος είναι της μορφής, P 2,, …, P q >, q < p, όπου P i δείκτης δέντρου, K i τιμή αναζήτησης, Pr i δείκτης δεδομένων 2. Σε κάθε κόμβο Κ 1 < Κ 2 < … Κ q Για όλες τις τιμές X στο υποδέντρο που δείχνει το P j ισχύει Κ j-1 < X < K j για 1 < j < q, X < K j για j =1, και Κ j -1 < Χ για i = q P 1 K 1 Pr 1... K j-1 Pr j-1 P j … P q-1 K q-1 Pr q-1 P q X < K 1 K j-1 < X < K j K q-1 < X
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 24 Β-δέντρα 7. Όλα τα φύλλα βρίσκονται στο ίδιο επίπεδο. Τα φύλλα έχουν την ίδια δομή εκτός του ότι οι δείκτες δέντρου είναι null. 6. Ένας κόμβος με q δείκτες δέντρου περιέχει q - 1 τιμές πεδίου αναζήτησης (και άρα και q - 1 δείκτες δεδομένων) 4. Κάθε κόμβος έχει το πολύ p δείκτες δέντρου 5. Κάθε κόμβος εκτός της ρίζα και των φύλλων έχει τουλάχιστον (p/2) . Η ρίζα έχει τουλάχιστον 2 εκτός αν είναι ο μόνος κόμβος του δέντρου.
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 25 Β-δέντρα Τάξη p ώστε κάθε κόμβος να χωρά σε ένα block Έστω Β μέγεθος block, V μέγεθος πεδίου αναζήτησης, Pr μέγεθος δείκτη δεδομένων (εγγραφής) και P μέγεθος δείκτη δέντρου (block) p * P + (p - 1) * Pr + (p - 1) * V B p * (P + Pr + V) B + V + Pr p (B + V + Pr) / (P + Pr+ V) Παράδειγμα, V = 9 bytes, B = 512, Pr = 7 bytes, P = 6 bytes, τότε p = 23
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 26 Β-δέντρα Υπολογισμός επιπέδων Παράδειγμα, V = 9 bytes, B = 512, Pr = 7 bytes, P = 6 bytes, τότε p = 23. έστω ότι κάθε κόμβος είναι γεμάτος κατά 69% και έστω ότι το αρχείο δεδομένων έχει εγγραφές Ρίζα1 κόμβος15 (23*0,69) καταχωρήσεις 16 δείκτες Επίπεδο 1:16 κόμβοι240 (16*15) καταχωρήσεις 256 δείκτες Επίπεδο 2:256 κόμβοι3.840 (256*15) καταχωρήσεις δείκτες Επίπεδο 3:4.096 κόμβοι Σύνολο:
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 27 Ευρετήρια Είδη Ευρετηρίων Πυκνό Ευρετήριο μια καταχώρηση για κάθε εγγραφή του δίσκου Μη Πυκνό Ευρετήριο Ευρετήριο συστάδων (clustered index) στο πεδίο διάταξης το οποίο όμως δεν είναι κλειδί - γενικότερα, όταν η διάταξη των καταχωρήσεων στο ευρετήριο ακολουθεί τη διάταξη των εγγραφών στο αρχείο Ευρετήριο χωρίς συστάδες (unclustered index) Πρωτεύον Δευτερεύον (πλήρως αντεστραμμένο ευρετήριο)
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 28 Ευρετήρια Είδη Ευρετηρίων Ευρετήριο ενός επιπέδου ένα διατεταγμένο αρχείο με εγγραφές ( Ευρετήριο πολλών επιπέδων Ευρετήρια δομής δέντρου Ευρετήρια κατακερματισμού
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 29 Β-δέντρα Ένα Β-δέντρο τάξεως (order) ορίζεται ως εξής: 1. Κάθε εσωτερικός κόμβος είναι της μορφής, P 2,, …, P q >, q < p, όπου P i δείκτης δέντρου, K i τιμή αναζήτησης, Pr i δείκτης δεδομένων 2. Σε κάθε κόμβο Κ 1 < Κ 2 < … Κ q Για όλες τις τιμές X στο υποδέντρο που δείχνει το P j ισχύει Κ j-1 < X < K j για 1 < j < q, X < K j για j =1, και Κ j -1 < Χ για i = q P 1 K 1 Pr 1... K j-1 Pr j-1 P j … P q-1 K q-1 Pr q-1 P q X < K 1 K j-1 < X < K j K q-1 < X
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 30 Β-δέντρα 7. Όλα τα φύλλα βρίσκονται στο ίδιο επίπεδο. Τα φύλλα έχουν την ίδια δομή εκτός του ότι οι δείκτες δέντρου είναι null. 6. Ένας κόμβος με q δείκτες δέντρου περιέχει q - 1 τιμές πεδίου αναζήτησης (και άρα και q - 1 δείκτες δεδομένων) 4. Κάθε κόμβος έχει το πολύ p δείκτες δέντρου 5. Κάθε κόμβος εκτός της ρίζα και των φύλλων έχει τουλάχιστον (p/2) . Η ρίζα έχει τουλάχιστον 2 εκτός αν είναι ο μόνος κόμβος του δέντρου.
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 31 Β + -δέντρα Αποθηκεύουμε δείκτες δεδομένων μόνο στα φύλλα Δύο τύποι κόμβων: εσωτερικοί κόμβοι φύλλα Κάποιες τιμές του πεδίου αναζήτησης μπορεί να εμφανίζονται παραπάνω από μια φορά
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 32 Β + -δέντρα Ένα Β + -δέντρο τάξεως (order) p ορίζεται ως εξής: 1. Κάθε εσωτερικός κόμβος είναι της μορφής <P 1, K 1, P 2, K 2,, … K q-1, P q-1, P q, q p, όπου P i δείκτης δέντρου, K i τιμή αναζήτησης 2. Σε κάθε εσωτερικό κόμβο Κ 1 < Κ 2 < … Κ q Για όλες τις τιμές X στο υποδέντρο που δείχνει το P j ισχύει Κ j-1 < X K j για 1 < j < q, X K j για j =1, και Κ j -1 < Χ για i = q P 1 K 1... K j-1 P j K j … P q-1 K q-1 P q X K 1 K j-1 < X K j K q-1 < X
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 33 Β + -δέντρα 6. Ένας κόμβος με q δείκτες δέντρου περιέχει q - 1 τιμές πεδίου αναζήτησης 4. Κάθε εσωτερικός κόμβος έχει το πολύ p δείκτες δέντρου 5. Κάθε εσωτερικός κόμβος εκτός της ρίζα έχει τουλάχιστον (p/2) . Η ρίζα έχει τουλάχιστον 2 εκτός αν είναι ο μόνος κόμβος του δέντρου.
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 34 Β + -δέντρα 1. Κάθε κόμβος-φύλλο είναι της μορφής,, …, P next >, q p leaf, όπου p leaf είναι η τάξη των κόμβων-φύλλων K i τιμή αναζήτησης, Pr i δείκτης δεδομένων που δείχνει στο block (ή στην εγγραφή) με τιμή στο πεδίο αναζήτησης K i (ή σε ένα block ενδιάμεσου επιπέδου αν το πεδίο αναζήτησης δεν είναι κλειδί), P next δείχνει στο επόμενο φύλλο και χρησιμοποιείται για τη γρήγορη ανάγνωση του αρχείου σε διάταξη 2. Σε κάθε κόμβο-φύλλο Κ 1 < Κ 2 < … Κ q K 1 Pr 1... K j Pr j … K q Pr q P next
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 35 Β + -δέντρα 3. Κάθε κόμβος-φύλλο έχει το πολύ p leaf τιμές 5. Όλοι οι κόμβοι-φύλλα βρίσκονται στο ίδιο επίπεδο. 4. Κάθε κόμβος-φύλλο έχει τουλάχιστον (p leaf /2) τιμές.
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 36 Β + -δέντρα Τάξη p ώστε κάθε εσωτερικός-κόμβος να χωρά σε ένα block Έστω Β μέγεθος block, V μέγεθος πεδίου αναζήτησης, Pr μέγεθος δείκτη δεδομένων (εγγραφής) και P μέγεθος δείκτη δέντρου (block) p * P + (p - 1) * V B p * (P + V) B + V p (B + V) / (P + V) Παράδειγμα, V = 9 bytes, B = 512, Pr = 7 bytes, P = 6 bytes, τότε p = 34 Για Β-δέντρο, p = 23
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 37 Β + -δέντρα Τάξη p leaf ώστε κάθε φύλλο να χωρά σε ένα block Έστω Β μέγεθος block, V μέγεθος πεδίου αναζήτησης, Pr μέγεθος δείκτη δεδομένων (εγγραφής) και P μέγεθος δείκτη δέντρου (block) p leaf * (Pr + V) + P B p leaf * (Pr + V) B - P p leaf (B - P) / (Pr + V) Παράδειγμα, V = 9 bytes, B = 512, Pr = 7 bytes, P = 6 bytes, τότε p leaf = 31
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 38 Β + -δέντρα Υπολογισμός επιπέδων Παράδειγμα, V = 9 bytes, B = 512, Pr = 7 bytes, P = 6 bytes, τότε p = 34. έστω ότι κάθε κόμβος είναι γεμάτος κατά 69% και έστω ότι το αρχείο δεδομένων έχει εγγραφές Ρίζα1 κόμβος22 (34*0,69) καταχωρήσεις 23 δείκτες Επίπεδο 1:23 κόμβοι506 (23*22) καταχωρήσεις 529 δείκτες Επίπεδο 2:529κόμβοι (529*22) καταχωρήσεις δείκτες Επίπεδο φύλλων: κόμβοι ( * 31 * 0.69) δείκτες δεδομένων Σε 3 επίπεδα εγγραφές έναντι για Β-δέντρο
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 39 Β + -δέντρα Αναζήτηση (αναδρομική εκδοχή) nodepointer find(keyvalue K): return tree_search(root, K); end; Nodepointer tree_search(nodepointer P, keyvalue K) if P is a leaf return(P); else if K K 1 tree_search(P 1, K) else find i such that K i < K K i+1 return tree_search(P i+1, K) end
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 40 Β + -δέντρα Εισαγωγή 1. Αναζήτηση του φύλλου για εισαγωγή: έστω φύλλο P 2. Εισαγωγή τιμής Κ στο κόμβο P Αν ο κόμβος-φύλλο δεν είναι γεμάτος εισαγωγή της τιμής
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 41 Β + -δέντρα Εισαγωγή (συνέχεια) Αν ο κόμβος-φύλλο είναι γεμάτος (έχει p leaf εγγραφές) διάσπαση του κόμβου: -- οι πρώτες k = ((p leaf +1)/2) παραμένουν στον κόμβο -- οι υπόλοιπες σε καινούργιο κόμβο -- εισαγωγή (αντιγραφή) της k-οστής τιμής (K k) στον πατέρα Αν ο εσωτερικός κόμβος-φύλλο είναι γεμάτος (έχει p εγγραφές) διάσπαση του κόμβου: έστω k = ((p+1)/2) -- οι εγγραφές μέχρι το P k (μετά την εισαγωγή) παραμένουν στον κόμβο -- η k-οστή K k τιμή μεταφέρεται (δεν αντιγράφεται) στον πατέρα -- οι υπόλοιπες σε καινούργιο κόμβο
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 42 Β + -δέντρα Όλες οι τιμές εμφανίζονται στα φύλλα και κάποιες επαναλαμβάνονται και σε εσωτερικούς κόμβους (η τιμή Κ σε ένα εσωτερικό κόμβο εμφανίζεται επίσης ως η δεξιότερη τιμή στο φύλλο του υποδέντρου με ρίζα το δείκτη στα αριστερά του Κ)
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 43 Β + -δέντρα Διαγραφή 1. Αναζήτηση του φύλλου που περιέχει το Κ: έστω φύλλο P *** αν η τιμή Κ εμφανίζεται σε κάποιο εσωτερικό κόμβο πρέπει να αντικατασταθεί από την τιμή που βρίσκεται στα αριστερά του Κ στο φύλλο 2. Αν υποχείλιση αν είναι δυνατόν ανακατανομή με τον αριστερό αδελφό (> (n/2) ) αν όχι, προσπάθεια ανακατανομής με το δεξιό αδελφό αν όχι, συγχώνευση και των τριών κόμβων σε δύο κόμβους
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 44 Ευρετήρια Κατακερματισμού Εξωτερικός Κατακερματισμός h(k) = i Τιμή του πεδίου κατακερματισμού Σχετική διεύθυνση του κάδου (ποιος κάδος του αρχείου) Κάδος: μια συστάδα από συνεχόμενα blocks του αρχείου π.χ., η εγγραφή με τιμή k στο πεδίο κατακερματισμού βρίσκεται στον i-οστό κάδο
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 45 Οργάνωση Αρχείων Εξωτερικός Κατακερματισμός Ένας πίνακας που αποθηκεύεται στην επικεφαλίδα του αρχείου μετατρέπει τον αριθμό κάδου στην αντίστοιχη διεύθυνση block 0διεύθυνση 1ου block του κάδου στο δίσκο 1 διεύθυνση 1ου block του κάδου στο δίσκο 2 διεύθυνση 1ου block του κάδου στο δίσκο …... Μ-1 διεύθυνση 1ου block του κάδου στο δίσκο
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 46 Ευρετήρια Κατακερματισμού Εξωτερικός Κατακερματισμός Πρόβλημα: Έστω Μ κάδους και r εγγραφές ανά κάδο - το πολύ Μ * r εγγραφές
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 47 Ευρετήρια Κατακερματισμού Δυναμικός Εξωτερικός Κατακερματισμός Δυαδική αναπαράσταση του αποτελέσματος της συνάρτησης κατακερματισμού, δηλαδή ως μια ακολουθία δυαδικών ψηφίων Κατανομή εγγραφών με βάση την τιμή των αρχικών ψηφίων
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 48 Ευρετήρια Κατακερματισμού 1. Δυναμικός Κατακερματισμός Το αρχείο ξεκινά με ένα μόνο κάδο Μόλις γεμίσει ένας κάδος διασπάται σε δύο κάδους με βάση την τιμή του 1ου δυαδικού ψηφίου των τιμών κατακερματισμού -- δηλαδή οι εγγραφές που το πρώτο ψηφίο της τιμής κατακερματισμού τους είναι 1 τοποθετούνται σε ένα κάδο και οι άλλες (με 0) στον άλλο Νέα υπερχείλιση ενός κάδου οδηγεί σε διάσπαση του με βάση το αμέσως επόμενο δυαδικό ψηφίο κοκ
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 49 Ευρετήρια Κατακερματισμού 1. Δυναμικός Κατακερματισμός (συνέχεια) Παράδειγμα Έτσι δημιουργείται μια δυαδική δενδρική δομή που λέγεται κατάλογος (dirtectory) ή ευρετήριο (index) με δύο ειδών κόμβους εσωτερικούς: που καθοδηγούν την αναζήτηση εξωτερικούς: που δείχνουν σε ένα κάδο
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 50 Ευρετήρια Κατακερματισμού 1. Δυναμικός Κατακερματισμός (συνέχεια) Αλγόριθμος αναζήτησης h := τιμή κατακερματισμού t := ρίζα του δέντρου i := 1 while (t εσωτερικός κόμβος) if (i-οστό bit του h είναι 0) t := αριστερά του t else t := δεξιά του t i := i +1
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 51 Ευρετήρια Κατακερματισμού 1. Δυναμικός Κατακερματισμός (συνέχεια) Που αποθηκεύεται ο κατάλογος στη μνήμη, εκτός αν είναι πολύ μεγάλος αν στο δίσκο απαιτούνται επιπρόσθετες προσπελάσεις Δυναμική επέκταση αλλά μέγιστος αριθμός επιπέδων (το πλήθος των δυαδικών ψηφίων της συνάρτησης κατακερματισμού) Ισοζύγιση Συνένωση κάδων (δυναμική συρρίκνωση όταν τα περιεχόμενα δυο γειτονικών κάδων μπορούν να χωρέσουν σε έναν)
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 52 Ευρετήρια Κατακερματισμού 2. Επεκτατός Κατακερματισμός Ο κατάλογος (ευρετήριο) είναι ένας πίνακας με 2 d διευθύνσεις κάδων (d: ολικό βάθος του καταλόγου) Τα πρώτα d ψηφία της τιμής κατακερματισμού χρησιμοποιούνται ως δείκτης στον πίνακα Δε χρειάζεται ένας διαφορετικός κάδος για κάθε μία από τις 2 d θέσεις - μπορεί η θέση του πίνακα να δείχνει στη διεύθυνση του ίδιου κάδου αν αυτές χωράνε σε ένα κάδο Για κάθε κάδο, τοπικό βάθος d’ o αριθμός των δυαδικών ψηφίων στα οποία βασίζεται η χρήση του κάδου
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 53 Ευρετήρια Κατακερματισμού 2. Επεκτατός Κατακερματισμός (συνέχεια) Η τιμή του d μπορεί να αυξάνεται (μέχρι 2 κ, κ: αριθμός δυαδικών ψηφίων της τιμής κατακερματισμού) ή να μειώνεται Αύξηση της τιμής του d Όταν ένας κάδος με τιμή d’ = d υπερχειλίσει Διπλασιασμός του πίνακα Μείωση της τιμής του d Όταν για όλους τους κάδους d’ < d Μείωση του μεγέθους του πίνακα στο μισό
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 54 Ευρετήρια Κατακερματισμού 3. Γραμμικός Κατακερματισμός Αριθμός Διασπάσεων n = 0: Έστω αρχικά Μ κάδους αριθμημένους από 0 έως Μ - 1 και αρχική συνάρτηση κατακερματισμού h 0 (k) = k mod M Αριθμός Διασπάσεων n = 1: Όταν συμβεί μια υπερχείλιση σε έναν οποιοδήποτε κάδο, ο κάδος 0 χωρίζεται σε δύο κάδους: τον αρχικό κάδο 0 και ένα νέο κάδο Μ στο τέλος του αρχείου με βάση την συνάρτηση h 1 (k) = k mod 2M Αριθμός Διασπάσεων n = κ : Όταν συμβεί μια υπερχείλιση σε έναν οποιοδήποτε κάδο, ο κάδος κ - 1 χωρίζεται σε δύο κάδους: τον αρχικό κάδο κ - 1 και ένα νέο κάδο Μ + κ - 1 στο τέλος του αρχείου με βάση την συνάρτηση h 1 (k) = k mod 2M Συνεχίζουμε γραμμικά, διασπώντας με τη σειρά τους κάδους 1, 2, 3,...
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 55 Ευρετήρια Κατακερματισμού 3. Γραμμικός Κατακερματισμός (συνέχεια) Έστω n ο αριθμός διασπάσεων και ότι αναζητούμε το k, τότε αν n h 0 (k) o κάδος δεν έχει διασπαστεί ενώ αν n > h 0 (k) o κάδος έχει διασπαστεί και εφαρμόζουμε την h 1 (k) Αλγόριθμος αναζήτησης
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 56 Ευρετήρια Κατακερματισμού 3. Γραμμικός Κατακερματισμός (συνέχεια) Όλοι οι κάδοι έχουν διασπαστεί όταν ;n = M Τότε έχουμε 2M κάδους Όταν n = M, μηδενίζουμε το n, n = 0 και για οποιαδήποτε νέα διάσπαση εφαρμόζουμε την h 2 (k) = k mod 4M Γενικά βήμα διάσπασης j - h j (k) = k mod 2 j M, j = 0, 1, 2, … και την h j+1 (k) για διασπάσεις
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 57 Ευρετήρια Κατακερματισμού 3. Γραμμικός Κατακερματισμός (συνέχεια) Αλγόριθμος Αναζήτησης j : βήμα διάσπασηςn : πλήθος διασπάσεων στο βήμα j if (n = 0) then m := h j (k); else { m := h j (k); if (m < n) then m := h j+1 (k) }