Effizienz: Indexstrukturen Richard Göbel
Indexstrukturen - Ideen Ohne Indexstrukturen wächst der Suchaufwand mindestens linear mit der Anzahl der Einträge Der Suchaufwand lässt sich zum Beispiel beschleunigen durch: binäres Suchen in sortierten Listen Hash-Verfahren Die Indexstruktur muss die Verwaltung des Sekundärspeichers berücksichtigen
Indexstrukturen auf einer Festplatte Für eine Festplatte wird immer mindestens ein Block gelesen und geschrieben. Mögliche Blockgrößen sind zum Beispiel zwischen 512 und 65536 Byte. Der Aufwand für den Zugriff auf einen Block ist um mehrere Größenordnungen höher als Operationen im Hauptspeicher! Die Indexstrukturen wird so gewählt, dass ein Block vollständig mit Werten und Referenzen auf Nachfolgeknoten gefüllt wird.
Effiziente Algorithmen für: B-Baum - Konzept Baumstruktur mit: gleicher Länge aller Pfade von der Wurzel zu den Blättern (Baum ist „perfekt“ balanciert) Abbildung von Knoten auf Blöcke des Sekundärspeichers hohem Verzweigungsgrad (Kapazität der Blöcke) Effiziente Algorithmen für: die Suche das Einfügen das Löschen von Einträgen
B-Baum - Beispiel mit Verzweigungsgrad 3
B-Baum - Suche nach Wert 13
B-Baum - Suche Werte zwischen 12 und 26 Verkettung zwischen den einzelnen Blättern für eine Bereichssuche sinnvoll!
B-Baum - Einfügen von Einträgen Suche das Blatt, in das der neue Wert eingefügt werden muss Ausreichend Speicherplatz in dem Knoten vorhanden: JA: Wert einfügen NEIN: Blattknoten (und bei Bedarf Elternknoten) teilen Referenzen zwischen dem neuen Wert und den zugehörigen Einträgen herstellen
B-Baum - Löschen von Einträgen Suche das Blatt, aus dem der Wert gelöscht werden muss Knoten noch ausreichend gefüllt: JA: Wert löschen NEIN: Inhalt des Blattknoten auf andere Blätter verteilen Referenz des Blattknoten in Vaterknoten löschen Elternknoten noch ausreichend gefüllt . . .
B-Baum für Bereichssuche
asymptotischer Aufwand B-Baum - Diskussion asymptotischer Aufwand Finden des ersten Eintrags: O(log(n)) Lesen aller Ergebnisse (Blätter verkettet): O(m) Gesamtaufwand: O(log(n) + m) Für sehr große Datenbanken ist der Aufwand damit weitgehend unabhängig von der Größe der Datenbank
Suchbedingungen für mehrere Spalten Allgemeine Form der Anfragen lower1 column1 upper1 AND lower2 column2 upper1 . . . AND lowerd columnd upperd Ziel: Bearbeitungszeit einer Anfrage ist nur in geringem Maß abhängig von der Anzahl der gespeicherten Einträge Bearbeitungszeit einer Anfrage ist linear abhängig von der Anzahl der Suchergebnisse
Erweiterungen des B-Baums Ansatz: Abbildung mehrerer Werte auf einen einzelnen Wert Mögliche Operationen für die Kombination: Konkatenation Bit-Interleaving Auswirkung auf die Effizienz von Suchanfragen?
Analyse: Suchen mit zwei Spalten
Analyse: Beispiel mit 2 Spalten 2 a 4 2 b 3
Analyse - Werte der Spalten konkatenieren Werte der betrachteten Spalten werden „zusammengehängt“ Die neuen Werte werden mit Hilfe der lexikographischen Ordnung verglichen. . . .
Analyse - Bit-Interleaving 1 Werte mit den Bitfolgen 'x1x2 . . . xn‘ und 'y1y2 . . . yn' werden zu dem Wert 'x1y1x2y2 . . . xnyn‘ kombiniert Die erzeugten Bitfolgen lassen sich danach direkt vergleichen . . .
Analyse - Bit-Interleaving 2
Erweiterungen des B-Baums - Diskussion Erweiterungen unterstützen Punktsuchen mit logarithmischen Zeitaufwand Für Bereichssuchen ist der Ansatz des Bit-Interleaving günstiger als die Konkatenation Im schlechtesten Fall wächst der Suchaufwand für beide Verfahren linear mit der Anzahl der Einträge