In diesem Projektseminar bauen wir von Grund auf ein Datenbanksystem. Mit Fokus auf 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 mit einer unserer Datenbanken Hyrise (Open-Source) oder Skyrise 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 wird der Einstieg erleichtert. 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 an einer größeren 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 unserer Datenbanksysteme es schwierig macht, in wenigen Wochen ein vollständiges Verständnis der Code-Basis 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++20-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 den Datenbanken fortzuführen.
Ablauf
Das Seminar wird in Präsenz stattfinden.
1. Sprint: Einfache Tabellenfunktionalitäten, unter anderem spaltenbasierte Datenhaltung verschiedener Datentypen
2. Sprint: Wörterbuch-Kompression
3. Sprint: Table-Scan als erster Datenbankoperator
Gruppenphase: Implementierung ausgesuchter Komponenten wie zum Beispiel:
- Verbesserung des Index-Join-Operators
- Verbesserung des Hash-Join-Operators
- Implementierung eines Max-Diff-Histogramms zur Abschätzung der Kardinalitäten von Zwischenergebnistabellen.
Abschlusspräsentation der Gruppenergebnisse
Voraussetzungen
- C++-Kenntnisse
- grundlegende Datenbankkenntnisse (DBS I) wünschenswert, aber nicht erforderlich
Lern- und Lehrformen
- Vorlesungen zur grundlegenden Einführung in die Implementierung von Datenbankkonzepten
- Gruppenbasiertes Software-Projekt
- Wöchentliche Treffen
Leistungserfassung
- Programmieraufgaben
- Sprint-Implementationen
- Code-Reviews anderer Sprint-Implementationen
- Projekt-Implementation
- Code-Review einer anderen Projekt-Implementation
- Mündliche Leistungen
- Projektpräsentation
- Aktive Teilnahme an allen Seminarveranstaltungen
Kriterien bei der Bewertung der Programmieraufgaben sind neben der Funktionalität auch die
- Code-Qualität,
- Performanz und
- Testabdeckung
Lernziele
Nach Abschluss des Kurses sollten die TeilnehmerInnen fähig sein
- Basiskonzepte moderner Datenbanksysteme zu erläutern
- sich in eine komplexe Code-Basis eigenständig einzuarbeiten
- Datenbankkomponenten in einer bestehenden Code-Basis zu implementieren und experimentell zu evaluieren
- Implementierungen von Datenbankkomponenten hinsichtlich ihrer Effizienz zu analysieren und zu diskutieren
- moderne C++-Konzepte in Programmierarbeiten anzuwenden
Materialien
Lehrmaterialien werden in dem Kurs DYOD22 des HPI-Moodles bereitgestellt: https://moodle.hpi.de/course/view.php?id=279