Ü3 - Universität Basel | Informatik

Werbung
UNIVERSITÄT BASEL
Prof. Dr. Heiko Schuldt
Ihab Al Kabary, MSc
Ilir Fetai, MSc
Nenad Stojni¢, MSc
cs243: Datenbanken
Übung 3
FS 2013
Abgabe: 16.04.2013 (23:59 Uhr)
Aufgabe 1: B*-Baum Implementierung
(15 Punkte)
In dieser Aufgabe sollen Sie die Implementierung einer wichtigen Indexstruktur des
B*-Baums vervollständigen. Laden Sie sich die verfügbaren Java-Quelldateien herunter
(u3.zip) und machen Sie sich zunächst mit dem schon implementierten Code vertraut. Die
für Sie wichtigsten Operationen benden sich in den Klassen BPlusTree und SearchNode.
Zum Testen verwenden Sie bitte die JUnit-Tests der Klasse SearchNodeTest.1 Alle benötigten Änderungen führen Sie bitte in der bereitgestellten Datei SearchNode.java
durch.2
a) Implementieren Sie die Berechnung der maximal unterstützten Ordnung des Baums
im öentlichen Konstruktor. Führen Sie die Berechnung entweder schrittweise durch,
oder fügen Sie einen kurzen Kommentar ein, der beschreibt, wie Sie die benötigte
Formel ermittelt haben.
(3 Punkte)
b) Implementieren Sie die Methode propagateInsert, die das Einfügen von überlaufenden Indexwerten in innere Baumknoten übernimmt.
Hinweis: die Referenzimplementierung umfasst etwa 60 Zeilen Code; ein Grossteil der
Logik dieser Methode ist sehr ähnlich aufgebaut wie die der
leafInsert()-Methode.
(12 Punkte)
1 Alternativ
dazu können Sie die Klasse DBSU verwenden, die dieselben zwei Tests ohne JUnit implementiert. Durch umdenieren der Variablen TEST können Sie zwischen den zwei Tests umschalten.
2 Es wird emfohlen, Eclipse zur Entwicklung und Kompilierung zu verwenden, da der Standard-JavaCompiler von Sun (wegen unterschiedlicher Auassung von Generics und Klassenhierarchie) die Klasse SearchNode nicht kompiliert.
1
Aufgabe 2: Datenspeicherung
(15 Punkte)
Wir betrachten einen Teil einer Musikdatenbank mit der folgenden Schemadenition:
CREATE TABLE Disk (
DiskID
NUMBER PRIMARY KEY NOT NULL,
DiskTitel
VARCHAR(255)
);
CREATE TABLE Musikstueck (
DiskID
NUMBER,
StueckID NUMBER,
Titel
VARCHAR(255),
PRIMARY KEY (DiskID, StueckID)
);
CREATE TABLE Person (
PID
NUMBER PRIMARY KEY NOT NULL,
Name
VARCHAR(40) NOT NULL,
Nationalitaet CHAR(5)
);
CREATE TABLE Musikstueck_Autor (
PID
NUMBER NOT NULL REFERENCES Person,
DiskID
NUMBER NOT NULL,
StueckID
NUMBER NOT NULL,
Taetigkeit VARCHAR(20) NOT NULL,
FOREIGN KEY (DiskID, StueckID) REFERENCES Musikstueck
);
Als Kardinalitäten und mittlere Tupellängen der gegebenen Relationen nehmen wir an:
Disk
Musikstueck
Person
Musikstueck_Autor
1000
10000
6000
30000
Tupel
Tupel
Tupel
Tupel
à
à
à
à
100
50
40
40
Bytes
Bytes
Bytes
Bytes
Zur Ezienzsteigerung von Anfragen sind unter anderem die folgenden mittelbaren Indexe angelegt, die jeweils als B∗ -Baum implementiert sind:
CREATE UNIQUE INDEX DiskID ON Disk (DiskID);
CREATE INDEX DiskTitel ON Disk (DiskTitel);
CREATE INDEX AutorStueck ON Musikstueck_Autor (PID);
2
Nehmen Sie an, dass jede Relation jeweils einen eigenen Tablespace belegt, wobei die
Seitengrösse 4 KB sei und der Seiten-Header die Länge 96 B habe. Datenseiten seien zu
90 Prozent, Indexseiten zu 70 Prozent gefüllt. Der Datentyp NUMBER belege 10 B, der
Disktitel sei Schlüsselkandidat der Relation Disk und habe eine durchschnittliche Länge
von 90 B; ein TID oder Zeiger im B∗ -Baum habe die Länge 6 B.
a) Berechnen Sie den Speicherplatzbedarf für die Primärdaten, d.h. berechnen Sie die
Tupel pro Seite und die Anzahl der Seiten, die zur Abspeicherung der in den Relationen des Schemas enthaltenen Daten benötigt werden.
(4 Punkte)
b) Berechnen Sie den für die Indexe benötigten Speicherplatzbedarf, d.h. berechnen Sie
die Einträge pro Blattseite und pro inneren Knoten sowie mit Hilfe dieser Ergebnisse
die Anzahl der Blattseiten und inneren Knoten.
(7 Punkte)
c) Berechnen Sie die Seitenzugrie (Index- und Datenseitenzugri) bei folgenden drei
Anfragen unter Verwendung des jeweiligen Index. Sie können davon ausgehen, dass
die angefrageten Tupel existieren.
SELECT * FROM Disk WHERE DiskID = 4711;
SELECT * FROM Disk WHERE DiskTitel = 'Opelgang';
SELECT * FROM Musikstueck_Autor WHERE PID = 1199;
(4 Punkte)
3
Herunterladen