Räumliche Indexstrukturen Geoinformationssysteme Speicherung geometrischer Objekte ● Punkte ● Linien/Linienzüge ● Polygone Geoinformationssysteme Spezielle Anfragen: Wo befindet sich der zu Punkt X am nächsten gelegene Punkt? Welche Polygone grenzen an das Polygon, in dem Punkt X liegt, an? Geoinformationssysteme ● ● Klassische, relationale Datenbanken nicht geeignet Keine Möglichkeit, effizient die gewünschten Queries auszuführen Lösung: Räumliche Indexstrukturen Indexstrukturen ● ● ● Keine lineare Ordnung vorhanden, diese wird aber zur Indexierung benötigt Datenraum wird in Blöcke zerlegt Speicherung der Blöcke in einem Index mit Nachbarschaftserhaltung Zerlegung in Blockregionen ● Keine simple Aufgabe ● Probleme vor allem bei Polygonen und Linien verschiedene Lösungsmöglichkeiten: ● Clipping ● Punkttransformationen ● Überlappung Clipping ● Objekte werden jedem Block zugewiesen, den sie schneiden Nachteil: ● Duplikate entstehen Punkttransformationen ● Überführung eines n-dimensionalen Rechtecks in einen 2n-dimensionalen Punkt möglich Nachteil: ● Schlechte Nachbarschaftserhaltung durch Umwandlung Überlappung ● Das Überlappen von Blockregionen wird erlaubt ● Duplikate werden vermieden ● ● ● Leicht schlechtere Suchperformance, da zum Teil mehrere Blöcke durchsucht werden müssen Ggü. Clipping vereinfachtes Update von Objekten Performance hängt wesentlich vom verwendeten Algorithmus zur Aufteilung ab Raumfüllende Kurven ● Blöcke müssen unter Beibehaltung der Nachbarschaft von mehreren Dimensionen auf eine gemappt werden Lösung: Raumfüllende Kurven Z-Kurve (Z-Order) ● ● ● Sehr einfach zu berechnen Liefert gute Nachbarschaftserhaltung Kann problemlos auf beliebig viele Dimensionen erweitert werden Z-Kurve (Z-Order) Berechnung durch Interleaving: (x1x0b, y1 y0b) x1y1x0y0b Beispiel: (5, 3) (0101b, 0011b) 39 0010 0111b Z-Kurve (Z-Order) Nachteil: ● Nur Räume mit gleicher Ausdehnung in jede Dimension ergeben lückenlosen Index Hilbert-Kurve ● ● Erfordert wesentlich mehr Rechenleistung zur Berechnung Bessere Nachbarschaftserhaltung ggü. Z-Kurve Datenstrukturen Möglichkeiten: ● Quadtrees ● R-Bäume und Varianten Quadtree ● ● Einfache Möglichkeit, geometrische Objekte effizient zu speichern Wird in Verbindung mit der Z-Order genutzt Quadtree ● ● Kompletter Datenraum wird zunächst als einzelner Block definiert Beim Hinzufügen von Elementen wird ein Block in 4 neue Blöcke aufgeteilt, wenn Maximalzahl innerhalb des Blocks überschritten wurde Quadtree Vorteile durch Abspeicherung in Z-Order: ● ● ● Indizes der Parent- und Child-Knoten durch BitShifting zu errechnen Auch Indizes der Siblings können mit wenigen bitweisen Operationen ermittelt werden Auf den eingelesenen Pages befinden sich Knoten, die auch im Raum nah beieinander liegen Quadtree Nachteil: ● Clipping wird benötigt, was zu Duplikaten führt und den Baum u.U. Stark vergrößert R-Baum ● Verbindet Duplikatfreiheit mit kurzen Suchzeiten ● Ist Höhenbalanciert (an den B-Baum angelehnt) ● Knoten werden durch das minimale umgebende Rechteck (Bounding-Box) spezifiziert R-Baum Suchen: ● ● ● Eingabe für die Suche: Rechteck Ermitteln, mit welchen Knoten sich das Rechteck schneidet Rekursives Traversieren dieser Knoten R-Baum Einfügen: ● ● ● ● Von der Wurzel beginnend überprüfen, welche der Bounding-Boxes am wenigsten vergrößert werden müsste, um das Objekt einzufügen Bei gleicher Eignung von Knoten wird derjenige mit der kleinsten Fläche ausgewählt Fortsetzen des Verfahrens bis zum Blatt Ist kein Platz mehr im Blatt vorhanden, wird ein Split durchgeführt R-Baum R-Baum R-Baum R-Baum Split: ● ● ● Ziel ist es, 2 Blätter/Knoten zu erstellen, die eine minimale Gesamtfläche der BoundingBoxes aufweisen Exakte Methode, jede mögliche Kombination vergleichen, unbrauchbar, da Laufzeit O(2M) Heuristiken möglich R-Baum Heuristik 1: ● ● ● ● Auswahl der 2 Elemente, die, wenn sie zu einer Gruppe gehören würden, den meisten Platz verschwenden Zuteilung dieser Elemente zu den 2 neuen Gruppen Hinzufügen des Elements, das in einer Gruppe den meisten unnützen Leerraum erzeugen würde Laufzeit: O(M²) R-Baum Heuristik 2: ● ● ● Die 2 Elemente, welche die ursprüngliche Bounding-Box aufspannen werden den 2 neuen Gruppen hinzugefügt Jedes weitere Element wird der Gruppe hinzugefügt, dessen Bounding-Box dadurch am wenigsten wächst Laufzeit: O(M) R-Baum ● Laut GUTTMAN besteht kein nennenswerter Unterschied zwischen der Qualität beider Heuristiken, weshalb letztere auf Grund der geringeren Laufzeit empfohlen wird R*-Baum ● BECKMANN stellt fest, dass Minimierung der Fläche bei einem Split nicht immer optimal ist Vorschlag für neue Minimierungskriterien: ● Minimierung der Fläche der Bounding-Boxes ● Minimierung der Überschneidungen ● Minimierung des Umfangs ● Verbesserung der Speichernutzung R*-Baum ● ● ● Weiterer Vorschlag: Anstelle des Zusammenführens unterbesetzter Knoten nach einem Delete, werden diese komplett neu eingefügt Verringert ungünstige Baumstrukturen, die durch das schrittweise Einfügen von Elementen entstehen können Der R*-Baum zeigt gegenüber dem R-Baum einen deutlichen Performance-Gewinn