Hier bauen Studenten ihre erste Datenbank von Grund auf. 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.
In der ersten Hälfte der Vorlesungszeit werden grundlegende Komponenten (Storage, Komprimierung, Operatoren) zunächst vorgestellt und daraufhin von jeder Gruppe implementiert. Eine hohe Modularisierung ist angestrebt, sodass Komponenten unter den Gruppen ausgetauscht werden können.
Im zweiten Teil arbeiten wir mit einer gemeinsamen Code-Basis weiter. Hierfür implementieren die Gruppen nach Absprache mit den Betreuern weiterführende Komponenten. Während in den letzten beiden Jahren viele grundlegende Komponenten, wie beispielsweise Joins und Aggregate implementiert wurden, wollen wir uns dieses Jahr der Optimierung widmen. Wir wollen uns ansehen, wie neue Regeln im Query Optimizer, neue Indexstrukturen, oder sich selbst optimierende Algorithmen die Performance der Datenbank verbessern. Hierbei hilft uns das Benchmark-Framework, mit dem wir nach jeder Änderung die absolute Laufzeitverbesserung vermessen können.
Ihr seid in diesem Seminar richtig, wenn ihr
- besser verstehen wollt, wie moderne Hauptspeicherdatenbanken funktionieren,
- Erfahrungen in der Entwicklung komplexerer Systemse sammeln wollt,
- eure C++17-Kenntnisse verbessern wollt*, und
- in kleineren Gruppen als Teil eines großen Projekts arbeiten wollt.
*) Ja, wir würden auch lieber mit C++2a anfangen, aber der gcc, der das kann, ist noch kaputt.
Ablauf
1. Sprint: Einfache Tabellenfunktionalitäten, unter anderem spaltenbasierte Datenhaltung verschiedener Datentypen
2. Sprint: Wörterbuch-Kompression
3. Sprint: Darauf aufbauende Datenbankoperatoren wie Select und Insert
Gruppenphase: Implementierung ausgesuchter Komponenten wie zum Beispiel:
- Optimizer-Regeln, die korrelierte Subqueries in Joins überführen oder die Sortierung vorhergehender Operatoren ausnutzen
- Tuning-Komponenten, die für verschiedene Stellschrauben automatisch möglichst optimale Werte finden
- Verbesserte Scans, zum Beispiel durch Einsatz von Predication und AVX-512
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
- Funktionalität
- Code-Qualität
- Performanz
- Testabdeckung
- Abschlusspräsentation (20 Minuten pro Gruppe)
- Aktive Mitarbeit während der wöchentlichen Treffen