Datenbanken IIB: DBMS-Implementierung
Übung,
u.a. kleines DBMS-Projekt
Als Teil der Hausaufgaben soll
ein kleines Stück eines DBMS in C++ programmiert werden.
Z.B. Pufferverwaltung, Datenstrukturen für Relationen
und Tupel (Satzschnittstelle),
eventuell einige Operationen der Relationalenalgebra
(Auswertungspläne).
Parallele Zugriffe und Transaktionsverwaltung
würden wir weglassen,
auch SQL und Anfrageoptimierung würden wir
sicher nicht schaffen.
Es ist außerdem geplant,
dass die Teilnehmer Zugriff auf eine Oracle-Datenbank
mit DBA-Rechten bekommen.
Die Durchführung einiger typischer DBA-Aufgaben
sollte auch Teil der Übung sein.
Aktuelle Hausaufgabenblätter:
Die Abgabe der Hausaufgaben erfolgt per EMail an mich
(brass@informatik.uni-halle.de
),
mit [dbi13]
als Teil der Betreff-Zeile.
Abgabetermin ist jeweils der nächste Montag vor der Übung
(also 12:15 - bei früherer Abgabe hätte ich ggf. die
Möglichkeit, es noch vor der Übung anzuschauen).
Sollte es noch technische Schwierigkeiten beim Einloggen
auf dem Rechner mit dem Oracle Server geben,
werde ich beim Abgabetermin großzügig sein.
Falls Sie in Gruppen zusammenarbeiten,
bitte nur eine EMail pro Gruppe!
- Erstes Übungsblatt (Oracle Data Dictionary, Benutzer anlegen):
- Zweites Übungsblatt (Projekt, Blöcke):
- Drittes Übungsblatt (Projekt, Blöcke):
- Viertes Übungsblatt (Platten):
- Fünftes Übungsblatt (Puffer / Cache für Platten-Blöcke):
- Sechstes Übungsblatt (Segmente):
- Siebtes Übungsblatt (RAID-Systeme, Speicherparameter in Oracle):
- Achtes Übungsblatt (Block für relationale Daten):
- Neuntes Übungsblatt (Anfang des Data Dictionary, B-Bäume):
- Zehntes Übungsblatt (Fortsetzung Data Dictionary, Index-Auswahl):
- Elftes Übungsblatt (Relationenscan, Oracle QEP):
- Zwölftes Übungsblatt
(Mini-DBMS-Benchmark, Oracle QEP, Kostenschätzung):
Projekt (Beispiel-Lösung):
Zweites Übungsblatt (Blöcke):
- Mini-Dokumentation (leicht modifiziertes Aufgabenblatt):
[h2_block.pdf]
- Lizenz (GNU GPL):
[COPYING]
- Makefile:
[Makefile]
[makedep]
- Grundlegende Parameter und Konstanten:
[ver.h]
- String-Datentyp:
[str.h]
[str.cpp]
- Integritätsprüfungen (Assertions):
[check.h]
[check.cpp]
- Datentyp für Nummern von Blöcken (unsigned int):
[bno.h]
- Datentyp für Offsets innerhalb eines Blockes (unsigned short):
[boff.h]
- Aufzählungstyp für verschiedene Arten von Blöcken:
[btype.h]
[btype.cpp]
- Oberklasse für alle Arten von Blöcken:
[block.h]
[block.cpp]
- Hauptprogramm (simpler Test):
[main.cpp]
- tar-Archiv aller Dateien (Verzeichnis h2):
[h2.tar]
Drittes Übungsblatt (Dateien):
- Mini-Dokumentation (leicht modifiziertes Aufgabenblatt):
[h3_file.pdf]
- Makefile (aktualisiert):
[Makefile]
- Typ für Segment-relative Blocknummern
(für spätere Fehlermeldungen):
[sbno.h]
- Typ für Datei-Größe (Anzahl Blöcke):
[fsize.h]
- Fehlermeldungen:
[err.h]
[err.cpp]
- Zeitmessung für Performance-Tests:
[perf.h]
[perf.cpp]
- File Header Block (wird später erweitert):
[fhblk.h]
[fhblk.cpp]
- Datenbank-Dateien (wird später erweitert):
[file.h]
[file.cpp]
- Hauptprogramm (kleiner Test):
[main.cpp]
- tar-Archiv aller Dateien (Verzeichnis h3):
[h3.tar]
Fünftes Übungsblatt
(Puffer Manager):
- Zugehöriges Aufgabenblatt:
[h5_file.pdf]
- Makefile (aktualisiert):
[Makefile]
- Puffer Manager:
[buf.h]
[buf.cpp]
- Hauptprogramm (erweitert):
[main.cpp]
- Testdaten (zufällige Blockzugriffe für Datei
mit 50.000 Blöcken):
[refstring.txt]
- Ausgabe des Tests (mit LRU-Verfahren und 2000 Puffer-Rahmen):
Time for 50232 block requests: 149 ms (140ms CPU)
Buffer hits: 38260
Buffer misses: 11972
Hit ratio: 0.761666
(Normalerweise müsste die Differenz zwischen Realzeit
und CPU-Zeit grüßer sein,
weil das Programm auf die Platte warten muss.
Da beim Test die Datei gerade vorher erzeugt und geschrieben
worden ist,
werden vermutlich viele Blöcke noch im Puffer des Betriebssystems
sein.
Das beeinflusst natürlich nicht die Hit Ratio unseres
Datenbank-Puffers,
aber die Laufzeit.)
Alte Hausaufgabenblätter (aus WS 2011/12):
- Erstes Übungsblatt (File Manager):
- [PDF]
- [ps, verkleinert]
- Wie in der Übung erklärt,
ist die vorgeschlagene Schnittstelle
nur als Diskussionsgrundlage zu verstehen.
- Noch ein Hinweis:
Wenn Sie bei der Programmierung von open in file_c
die Funktion open aufrufen,
bekommen Sie natürlich eine Rekursion!
Verwenden Sie ::open(...) zum Aufruf der globalen Methode
open aus der Bibliothek.
- Zweites Übungsblatt (Fehlerbehandlung):
- [PDF]
- Wie in der Übung diskutiert,
dürfen Sie auch Exceptions zur Fehlerbehandlung einsetzen.
Beteiligen Sie sich ggf. an der Diskussion
im Forum in StudIP.
- Drittes Übungsblatt (Platten):
- Viertes Übungsblatt (Puffer Manager):
- Fünftes Übungsblatt (Segment Manager):
- Sechstes Übungsblatt (RAID Systeme, Oracle Speicherverwaltung):
- [PDF]
- [ps, verkleinert]
- Hinweis: Bitte soweit als möglich mit den gegebenen
Plattendaten rechnen.
Annahmen nur, wenn unbedingt nötig.
Bei RAID-Systemen Gleichverteilung der Zugriffe annehmen.
Abgabetermin: 14.12.2011.
Überarbeitete Versionen werden noch akzeptiert.
- Siebtes Übungsblatt
(B-Bäume, Datenstrukturen für Relationen):
- [PDF].
- [ps].
- Abgabetermin: 15.12.2011 (vor der Übung).
- Achtes Übungsblatt (Data Dictionary, Index-Auswahl):
- [PDF].
- [ps].
- Abgabetermin für 8B: 22.12.2011 (vor der Übung).
Bei den Programmieraufgaben (wie 8A) sind die Abgabetermine
großzügiger,
allerspätestens 6 Wochen vor der Klausur
muß aber feststehen,
ob Sie die Modulleistung erreicht haben
(und ich brauche auch noch einige Tage).
- Neuntes Übungsblatt (Data Dictionary: Spalten):
- Zehntes Übungsblatt (Relationenscan, Oracle QEP):
- Elftes Übungsblatt (Benchmark, Oracle QEP, Kostenschätzung):
Stefan Brass
(brass@informatik.uni-halle.de),
9. April 2013
Original URL:
http://www.informatik.uni-halle.de/~brass/dbi13/projekt.html
[XHTML 1.0 Checked]
[CSS Checked]
[Links Geprüft]
[Impressum]