Datenbanken II B: Implementierung von DBMS

Werbung
Institut für Informatik - Lehrstuhl Datenbanken
Datenbanken II B: Implementierung von DBMS
Wintersemester 08/09 - Dr. Alexander Hinneburg
Übung 5: Index-Erstellung und Z-Kurven (Abgabe bis 3.12.2007, 10.00 Uhr)
10 Punkte
Geben Sie die Lösung als PDF-Datei ab. (Auf die Größe achten, keine eingescannten Bilder!)
Aufgabe 5.1:
10 Punkte
Für diese Aufgabe sollen Sie auf zwei verschiedene Arten in einer Datenbank einen Index erstellen. Sie können sich über das Web-Frontend unter http://mozart.informatik.
uni-halle.de:5560/isqlplus/ mit den Nutzernamen DBIIB008_Vorname_Nachname
und dem Passwort, das Sie für das SVN bekommen haben, einloggen. Der Connect
Identifier ist studdb.
Bei der Aufgabe geht es um Zeitmessung, deshalb aktivieren Sie zuerst die Ausgabe der
Zeit, die ein Statement braucht, durch set timing on. Erstellen Sie eine Tabelle mit
131072 Tupeln und einen Index auf folgende zwei Arten
1. create table test(test_key integer);
create index test_idx on test (test_key);
insert into test select * from DBIIB08_HINNEBURG.data;
analyze index test_idx VALIDATE STRUCTURE;
analyze table test compute statistics;
2. create table test(test_key integer);
insert into test select * from DBIIB08_HINNEBURG.data;
create index test_idx on test (test_key);
analyze index test_idx VALIDATE STRUCTURE;
analyze table test compute statistics;
Um Ihre Quotas nicht zu überschreiten, müssen Sie nach jedem Erstellen von Tabelle
und Index beide wieder löschen mit
drop index test_idx;
drop table test;
Führen Sie beide Methoden zur Erstellung der Tabelle und des Indexes mehrmals (mind.
fünf mal) durch, berechnen Sie jeweils die Gesamtzeit für alle Operationen und bilden
Sie den Mittelwert von der Durchläufe. Gibt es einen Unterschied zwischen den durchschnittlichen Gesamtlaufzeiten für Methode 1 und 2? Wie erklären Sie den Unterschied?
1
Aufgabe 5.2:
10 Punkte
In der Datenbank aus Aufgabe 1 können Sie auf die Tabelle DBIIB08_HINNEBURG.multidim
zugreifen. Die Tabelle hat vier Integer-Attribute a1, a2, a3 und a4, die jeweils Werte
zwischen 0 und 7 annehmen können. Es sind 128 Tupel in der Tabelle gespeichert. Mit
der folgenden Anfrage können Sie die Anzahl der Tupel berechnen, deren Werte in a1
und a2 jeweils zwischen 2 und 3 liegen:
select count(*)
from DBIIB08_HINNEBURG.multidim
where 2<=a1 and a1<=3 and
2<=a2 and a2<=3;
Wenn Sie diese Anfrage mittels Linearisierung durch Z-Kurve und eindimensionalen
Index unterstützen wollen, muss für alle Tupel die Position auf der Z-Kurve bezüglich
der 2D-Koordinaten (a1,a2) berechnet werden. Außerdem muß noch geprüft werden,
ob die Position auf der Z-Kurve innerhalb des Intervalls liegt, das das Anfragefenster
vollständig enthält. Da die Z-Kurve die mehrdimensionalen Integer-Koordinaten monoton numeriert, müssen für die Prüfung die beiden Eckpunkte (3,3) und (4,4) transformiert werden. Deren Transformation ergibt die Eckpunkte des Intervalls auf der ZKurve, das das Anfrageintervall vollständig enthält. Die folgende Anfrage implementiert
alle notwendigen Operationen in SQL:
select count(*)
from (
select a1,a2,
mod(trunc(a1/1),2) *1 + mod(trunc(a2/1),2) *2 + mod(trunc(a1/2),2) *4 +
mod(trunc(a2/2),2) *8 + mod(trunc(a1/4),2) *16 + mod(trunc(a2/4),2) *32 as zorder
from DBIIB08_HINNEBURG.multidim
) tmp
where
mod(trunc(3/1),2) *1 + mod(trunc(3/1),2) *2 + mod(trunc(3/2),2) *4 +
mod(trunc(3/2),2) *8 + mod(trunc(3/4),2) *16 + mod(trunc(3/4),2) *32 <= zorder
and
zorder <=
mod(trunc(4/1),2) *1 + mod(trunc(4/1),2) *2 + mod(trunc(4/2),2) *4 +
mod(trunc(4/2),2) *8 + mod(trunc(4/4),2) *16 + mod(trunc(4/4),2) *32
;
Erklären Sie, was die in SQL implementierte Transformation von den 2D-Koordinaten
in die Z-Kurvennumerierung macht.1 Führen Sie beide Statements aus und geben Sie berechneten die Anzahlen an. Geben Sie das im zweiten Statement genutzte Suchintervall
in Z-Kurvenpositionen an.
Verallgemeinern Sie die Statements für den zweidimensionalen Fall auf drei und vier
Dimensionen und berechnen Sie die Anzahl der im Anfragefenster enthaltenen Tupel
bzw. die Anzahl der durch die Z-Kurve gefilterten Trefferkandidaten.
1 Die
Funktion trunc schneidet von einer Kommazahl die Nachkommastellen ab und mod(a,b) ist a mod b.
2
Herunterladen