Blatt 4

Werbung
Intelligentes
Datenmanagement
Sommersemester 2003
30. Juni 2003
Fachbereich Angewandte Informatik
Prof. Dr. Peter Becker
Aufgaben zum Praktikum 4
Für diese Aufgabe gehen wir davon aus, daß wir eine Relation
OID
x-Koordinate
y-Koordinate
mit folgenden Schema haben:
nichtgeometrische Attribute ...
Für diese Relation wollen wir eine Zugriffsstruktur implementieren und in eine Datenbank integrieren,
so daß Bereichsanfragen effizient beantwortet werden können.
Aufgabe 1 (Indexierung raumbezogener Daten)
Implementieren Sie eine geometrische Zugriffsstruktur für Punktdaten. Erstellen Sie hierzu ein Programm, das folgendes leistet:
Aufbau einer Verbindung zu einer Datenbank und Auslesen aller Tupel einer Relation, die Punktdaten enthält;
Aufbau einer geometrischen Zugriffsstruktur für diese Punktdaten; Einfügen der Punktdaten in
Verbindung mit den zugehörigen OIDs in diese Zugriffsstruktur;
Implementierung einer Bereichssuche; Zu einem Anfragerechteck sollen die OIDs der Objekte
geliefert werden, die sich innerhalb des Rechtecks befinden;
Für die Implementierung dürfen Sie sich eine beliebige geometrische Zugriffsstruktur aussuchen, z.B.
k-d-Baum, R-Baum, Grid-File etc.
Aufgabe 2 (Retrieval raumbezogener Daten)
Integrieren Sie Ihre Zugriffsstruktur in eine Datenbank. Deklarieren und implementieren Sie hierzu eine
Tabellenfunktion, die dazu dient, Bereichsanfragen zu beantworten. Die Tabellenfunktion soll als Ergebnis die OIDs der Objekte liefern, die innerhalb eines in einer Anfrage gegebenen Koordinatenrechtecks
liegen. Die Koordinaten des Anfragerechtecks werden als Parameter an die Tabellenfunktion übergeben.
Hierzu drei Vorschläge, wie Sie innerhalb der Tabellenfunktion die Zugriffsstruktur nutzen können.
Es wird das Client/Server-Paradigma benutzt. Die im Hauptspeicher liegende Zugriffsstruktur wird
dabei über ein Serverprogramm zugänglich gemacht. Die Tabellenfunktion stellt den Client dar,
der mit dem Server über ein einfaches Request/Reply-Protokoll kommuniziert. An den Server
wird als Request das Anfragerechteck geschickt. Der Reply besteht aus der Liste der OIDs, die
die Anfrage erfüllen. Für die Interprozeß-Kommunikation zwischen Client und Server können die
üblichen Konzepte eingesetzt werden, z.B. Sockets, RPC, Named Pipes, Shared Memory, Java
RMI, etc.
Nach dem Aufbau der Zugriffsstruktur im Hauptspeicher wird die Zugriffsstruktur serialisiert und
in einer Datei gespeichert. Die Zeiger müssen dabei in Dateiadressen (relative Byteadressen) umgewandelt werden. Die Tabellenfunktion nutzt nun die in der Datei liegende Zugriffsstruktur. Die
Bereichsanfrage wird dabei so implementiert, daß nur die notwendigen Seiten während der Abarbeitung der Anfrage in den Hauptspeicher übertragen werden.
Wie bei der vorigen Variante wird die Zugriffstruktur serialisiert in einer Datei gespeichert. Statt
die Seiten nun aber nach Bedarf vom Sekundär- in den Hauptspeicher zu übertragen, erfolgt ein
sogenanntes Memory Mapping der gesamten Datei in den Hauptspeicher. Hierbei wird eine komplette Datei in den virtuellen Speicher eines Programms abgebildet, so daß auf die Datei wie auf
Hauptspeicherinhalte zugegriffen werden kann. Erfolgt ein Zugriff auf eine Hauptspeicheradresse,
die mit einer Datei verbunden ist, so sorgt der Betriebssystem-Kern dafür, daß diese Seite in den
Hauptspeicher geladen wird und unter der entsprechenden Adresse zur Verfügung steht.
Hinweise zu Memory Mapping unter UNIX finden Sie in Büchern über Systemprogrammierung
(der Klassiker hierzu ist: W.R. Stevens, Advanced Programming in the UNIX Environment, AddisonWesley, 1992) bzw. auf den Manualseiten des Systemaufrufs mmap(2).
Aufgabe 3 (Anfragen und Analysen)
Zum Testen der Zugriffsstruktur bauen Sie eine entsprechend große Beispielrelation auf (mindestens
100.000 Tupel).
Geben Sie anschließend Bereichsanfragen in SQL an, die die Zugriffsstruktur nutzen bzw. nicht nutzen.
Ermitteln Sie die Laufzeit für diese Anfragen und vergleichen Sie diese.
Herunterladen