Hasso-Plattner-Institut
Prof. Dr. h.c. mult. Hasso Plattner
 

Develop Your Own Database

Allgemeine Information

  • Dozenten: Marcel Weisgut, Thomas BodnerMartin Boissier, David Justen, Daniel Lindner, Dr. Michael Perscheid
  • Semesterwochenstunden : 4
  • ECTS : 6
  • Benotet : Ja
  • Erstes Treffen: 20.04.2022 - 09:15 Uhr
  • Termin: wöchentlich Mittwoch - 09:15 Uhr; zusätzlich am 02.05.2022 - 09:15 Uhr (einziger Montagstermin), da der Termin am 04.05. wegen Dies Academicus entfällt.
  • Zusätzlicher Kickoff-Termin: 25.04. (Montag) um 09:15 Uhr
  • Zoom: Link, Meeting ID: 912 5792 3891, Passcode: 208717
  • Vortragstermin: TBD
  • Raum: L-1.06
  • Einschreibefrist : 25.04.2022 (siehe unten)
  • Programm : IT-Systems Engineering MA, Data Engineering MA
  • Lehrform : Projektseminar (PS)
  • Belegungsart : Wahlpflicht

Beschreibung

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

Einschreibung

Die Veranstaltung ist so ausgelegt, dass sechs Gruppen mit jeweils drei Mitgliedern an einzelnen Projekten arbeiten. Um die entsprechende Betreuung zu gewährleisten, muss das Seminar auf 18 Teilnehmer begrenzt werden. Die Erfahrung zeigt jedoch, dass die meisten Interessierten auch teilnehmen können. Wir bitten euch, bei Interesse die Veranstaltung spätestens bis zum Ende der ersten Woche zu belegen. So stehen zur zweiten Woche die Gruppen fest und niemand muss Arbeit erbringen ohne zu wissen, ob er teilnehmen kann.

Module

IT-Systems Engineering

  • BPET-{Konzepte und Methoden, Spezialisierung, Techniken und Werkzeuge}
  • OSIS-{Konzepte und Methoden, Spezialisierung, Techniken und Werkzeuge}

Data Engineering

  • PREP-{Konzepte und Methoden, Spezialisierung, Techniken und Werkzeuge}
  • SCAL-{Konzepte und Methoden, Spezialisierung, Techniken und Werkzeuge}