In diesem Projektseminar bauen wir von Grund auf ein Datenbanksystem. Anhand der am Lehrstuhl erforschten In-Memory-Technologie werden wir schrittweise und mit Hilfe praktischer Übungen die Basiskonzepte moderner Datenbanken erarbeiten. Nachdem jeder eine minimale Datenbank implementiert hat, werden wir uns einzelnen, komplexeren Konzepten widmen. Diese werden wir auf unserer Open-Source Datenbank Hyrise implementieren.
Während der ersten Hälfte der Vorlesungszeit werden grundlegende Komponenten (Storage, Komprimierung, Operatoren) zunächst vorgestellt und daraufhin von jeder Gruppe individuell implementiert. Durch vorgegebene Interfaces und Tests sind ein leichter Einstieg und schnelle Erfolge garantiert. Mit Code Reviews und einer anschließenden Besprechung von verschiedenen Implementierungsansätzen vertiefen wir sowohl das C++- und Architekturverständnis als auch die Datenbankkenntnisse.
Im zweiten Teil arbeiten wir mit einer gemeinsamen Code-Basis weiter. Hierfür implementieren die Gruppen in Zusammenarbeit mit den Betreuern weiterführende Komponenten. Während in den ersten Durchgängen dieses Seminars der Fokus auf der Implementierung grundlegender Datenbankfunktionen, wie zum Beispiel Joins und Aggregatfunktionen lag, können wir uns nun intensiver verschiedenen Optimierungsansätzen widmen. Hierbei können wir von bereits bestehenden Tests (>90% Coverage) und Benchmarks profitieren.
Da der Umfang von Hyrise es mittlerweile schwierig macht, in wenigen Wochen ein vollständiges Verständnis der Codebasis zu erwerben, achten wir bei der Auswahl der angebotenen Themen darauf überschaubare Teilprobleme zu isolieren. So könnt ihr Erfahrungen bei der Einarbeitung in umfangreichere Systeme sammeln, ohne ins kalte Wasser gestoßen zu werden.
Ihr seid in diesem Seminar richtig, wenn ihr
- besser verstehen wollt, wie moderne Hauptspeicherdatenbanken funktionieren,
- Erfahrungen in der Entwicklung komplexerer Systeme sammeln wollt,
- eure C++2a-Kenntnisse verbessern wollt, und
- in kleineren Gruppen als Teil eines großen Projekts arbeiten wollt.
Im Anschluss an das Seminar wird es Möglichkeiten geben, z.B. im Rahmen des Masterprojekts oder der Masterarbeit die Arbeit an der Datenbank fortzuführen.
Ablauf
1. Sprint: Einfache Tabellenfunktionalitäten, unter anderem spaltenbasierte Datenhaltung verschiedener Datentypen
2. Sprint: Wörterbuch-Kompression
3. Sprint: Full Table Scans als erster Datenbankoperator
Gruppenphase: Implementierung ausgesuchter Komponenten wie zum Beispiel:
- Effiziente Ausführung von Benchmarks über die Netzwerkschnittstelle
- Automatische Komprimierung und Indexerstellung
- Self-Driving Databases
- Verbesserung der Join-Operatoren
Abschlusspräsentation der Gruppenergebnisse
Voraussetzungen
- C++-Kenntnisse
- grundlegende Datenbankkenntnisse (TuK, DBS) wünschenswert, aber nicht erforderlich
Lern- und Lehrformen
- Einführungsveranstaltungen
- Gruppenbasiertes Software-Projekt
- Wöchentliche Treffen
Leistungserfassung
- Umsetzung der vorgegebenen Datenbankkomponenten in den einführenden Sprints (30%)
- Gruppenphase (einschließlich Abschlusspräsentation) (60%)
- Aktive Mitarbeit während der wöchentlichen Treffen (10%)
Kriterien bei der Bewertung sind neben der Funktionalität auch die
- Code-Qualität,
- Performanz und
- Testabdeckung