Indexing
Σκοπός του Indexing Τι είναι το Data Indexing? Έχει σημασία?
Η ιδέα των File Systems Αποθήκευση και οργάνωση δεδομένων σε αρχεία Ευκολότερη εύρεση και πρόσβαση δεδομένων κάθε στιγμή
Database Management Systems Το σύστημα αρχείων μιας βάσης δεδομένων ΒΔ: οργανωμένη συλλογή δεδομένων που έχουν λογική συσχέτιση (πρωτ. Και ξένα κλειδιά, τύποι δεδομένων, περιορισμοί)
Πρόσβαση σε Δεδομένα από ΒΔ read, modify, update, delete Το DBMS μεταφέρει τα δεδομένα σε buffer στην κύρια μνήμη Μεταφορά σε blocks μεταξύ δίσκου και μνήμης
Χρόνος? Η μεταφορά των δεδομένων σε blocks: αργή διαδικασία Η πρόσβαση εξαρτάται από το μέσο που χρησιμοποιείται
Γιατί? Πολλές γραμμές, 20 bytes η κάθε μία Θέλουμε την εγγραφή 100
Συσκευές φυσικής αποθήκευσης Random Access Memory (RAM): η πιο γρήγορη, αλλά και η πιο ακριβή Direct Access Memory: λίγο αργότερη, λίγο φτηνότερη Sequential Access Memory: η πιο αργή, η πιο φτηνή
Άλλοι παράγοντες Το query χρειάζεται πολύ χρόνο Το DBMS πρέπει να ψάξει τα blocks για να βρει δεδομένα που ταιριάζουν ery
Data Indexing Δομή δεδομένων που «επισυνάπτεται» στο αρχείο για ταχύτερη πρόσβαση Βασικός στόχος: μείωση των blocks που πρέπει να ψάξει το DBMS
Ιδιότητες Κλειδί αναζήτησης και pointer Κλειδί αναζήτησης: χαρακτηριστικό (-ά) που χρησιμοποιούνται για αναζήτηση εγγραφών Pointer: διεύθυνση μνήμης όπου είναι αποθηκευμένα τα δεδομένα Περίπου όπως το καταλογογραφικό σύστημα στις βιβλιοθήκες
Ευρετήρια δύο τύπων Ordered index (Πρωτεύον ευρετήριο ή ευρετήριο συστάδων): πρόσβαση δεδομένων με διάταξη Hash index (δευτερεύον ευρετήριο ή ευρετήριο χωρίς συστάδες): πρόσβαση δεδομένων κατανεμημένων ομοιόμορφα σε μια σειρά δεξαμενών
Τύποι Ordered Index Πυκνό ευρετήριο: μια εγγραφή για κάθε τιμή του κλειδιού Μη πυκνό ευρετήριο: μια εγγραφή για μερικές μόνο τιμές του κλειδιού
Πυκνό Ευρετήριο
Πυκνό ευρετήριο
Εισαγωγή σε πυκνό ευρετήριο Αν η τιμή δεν υπάρχει στο ευρετήριο, η νέα εγγραφή μπαίνει στην κατάλληλη θέση Αν το ευρετήριο κρατάει pointer για όλες τις εγγραφές με αυτή την τιμή, προστίθεται pointer για τη νέα εγγραφή Αν το ευρετήριο κρατάει μόνο τον pointer για την πρώτη τιμή, η εγγραφή μπαίνει αμέσως μετά τις τελευταίες εγγραφές με την ίδια τιμή
Διαγραφή σε πυκνό ευρετήριο Αν η εγγραφή που διαγράφεται ήταν η μοναδική με αυτή την τιμή, απλώς διαγράφουμε την τιμή Αν το ευρετήριο κρατάει pointer για όλες τις εγγραφές με αυτή την τιμή, διαγράφεται ο pointer για τη διαγραφείσα εγγραφή Αν το ευρετήριο κρατάει μόνο τον pointer για την πρώτη τιμή, ενημερώνουμε τον pointer μόνο αν ήταν η πρώτη εγγραφή αυτή που διαγράφηκε
Μη πυκνό ευρετήριο
Μη πυκνό ευρετήριο
Εισαγωγή σε μη πυκνό ευρετήριο Υποθέτουμε ότι κρατάμε μια εγγραφή για κάθε block Αν δεν δημιουργείται καινούριο block, καμιά αλλαγή Αν δημιουργείται καινούριο block, η πρώτη τιμή του κλειδιού στο νέο block προστίθεται στο ευρετήριο
Διαγραφή σε μη πυκνό ευρετήριο Αν η εγγραφή που διαγράφεται ήταν η μοναδική με αυτή την τιμή, στο ευρετήριο μπαίνει η επόμενη τιμή Αν η επόμενη τιμή υπάρχει στο ευρετήριο, τότε απλά διαγράφεται η διαγραφείσα Αν η τιμή κλειδιού της εγγραφής που διαγράφεται υπάρχει και αλλού, τότε είτε δε γίνεται καμία αλλαγή (αν ο δείκτης δεν δείχνει σε αυτή) είτε ο δείκτης ενημερώνεται για να δείχνει στην επόμενη εγγραφή
Ποιο ευρετήριο διαλέγουμε? Πυκνό: περισσότερο αποθηκευτικό χώρο και μεγαλύτερη μνήμη Ο χρόνος αναζήτησης είναι μικρότερος με το πυκνό Προτιμάμε πυκνό, αν το αρχείο του ευρετηρίου είναι μικρό σε σχέση με τη μνήμη που έχουμε Πρέπει να κάνουμε και μια πρόβλεψη για το πόσο μεγάλο μπορεί να γίνει το αρχείο στο μέλλον
Πολυεπίπεδο ευρετήριο Μπορεί το ευρετήριο να γίνει πολύ μεγάλο για να μπορεί να γίνει αποτελεσματικά αναζήτηση Λύση: indexing πολλών επιπέδων Το κύριο index γίνεται «ενδιάμεσο αρχείο» και δημιουργούμε ένα μη πυκνό index για αυτό The outer index is a sparse index of the primary index whereas the inner index is the primary index.
Πολυεπίπεδο ευρετήριο
Πολυεπίπεδο ευρετήριο
Συγκροτημένο Ευρετήριο (clustering index) Πχ. Τμήμα, σε έναν πίνακα υπαλλήλων
Συγκροτημένο Ευρετήριο (clustering index)
Συγκροτημένο Ευρετήριο (clustering index) Pointer στην κορυφη του block Overflow pointer αν η τιμη παει και σε άλλο block
Ευρετήριο B-Tree Η πιο συχνή δομή δεδομένων για indexing. Δυναμική δομή, μπορεί να μεγαλώσει και να μικρύνει
Τρεις τύποι κόμβων Βασικός κόμβος: δείκτες κόμβων σε κόμβους κλάδων Κόμβος κλάδου: δείκτες σε κόμβους φύλλων ή άλλους κόμβους κλάδων Κόμβος φύλλου: δείκτες σε άλλους κόμβους φύλλων ή αντικείμενα δεικτών
Full B-Tree Structure