Programmierpraktikum: Datensysteme SoSe 2025
(PR, 41136 Programmierpraktikum: Datensysteme)

Das Programmierpraktikum Datensysteme ist ein 6 ECTS Kurs der zum Ziel hat Methoden der Softwaretechnik praktisch anhand einer komplexen Aufgabenstellung zu erproben, Teamerfahrungen zu sammeln, und Methoden der effizienten Implementierung ausgewählter Komponenten von Datenbanksystemen kennen zu lernen. Zu Beginn jedes Semesters wird ein neues Projekt (oder mehrere) im Kontext der Implementierung von Datenbanksystemen (z.B., Indexstrukturen, Operatoren wie Joins oder Aggregationen, Bufferpool mit Seitenverdrängung) definiert. Die Studierenden erhalten die API dieser Komponente sowie ausgewählte Benchmarks, und die Aufgabe ist es in selbstorganisierten Teams von 4 Personen korrekte Implementierungen in C, C++, oder Java zu erstellen. Neben der Protypenentwicklung sind auch der systematische Umgang mit Versionsverwaltung, testgetriebener Entwicklung, Entwurfsdokumentation, sowie Laufzeitexperimenten und -verbesserungen von großer Bedeutung. Gleichzeitig erlaubt dieses Programmierpraktikum den Umgang mit vertiefenden Methoden der Gebiete Informationssysteme und Datenanalyse sowie Algorithmen und Datenstrukturen. Der Schwerpunkt liegt jedoch auf dem Erlernen des problemorientieren Einsatzes von Programmierkenntnissen zur Lösung konkreter Fragestellungen, nicht die ganzheitliche funktionale Betrachtung der Implementierung von Datenbanksystemen.


Inhalt

Das Programmierpraktikum hat eine Gesamtkapazität von 60 Studierenden, wobei drei Instanzen mit leicht unterschiedlicher thematischer Ausrichtung durch die Fachgebiete DAMS, DEEM, und D2IP angeboten werden (mit gemeinsamen Kickoff und Abschlusspräsentationen in BH-N 333, ansonsten alternierend; Montag 16-17.30 Uhr im B 106). PPDS ist unbenotet, jedoch werden die folgende Prüfungselemente zur Evaluierung eines positiven Abschlusses einbezogen:

  • Projektimplementierung (Source Code des Projekts) [45%]
  • Tests fuer Komponenten und Funktionen (Source Code der Tests) [10%]
  • Laufzeitexperimente (Erreichung Performance-Ziel) [15%]
  • Dokumentation (Design Dokument bis 5 Seiten) [15%]
  • Ergebnispräsentation (10min Vortrag) [15%]


Thema: Efficient In-memory Join Pipeline Executor

Kapazität: 28/60 Studierende (7 Teams a 4 Studierende)

API/Reference C/C++: ppds_ref_cpp.zip (last update: Apr 22)

API Java: TBD

Task Description: Die Aufgabe besteht darin, einen effizienten In-Memory-Join-Pipeline-Executor und entsprechende Operatoren zu implementieren, die auf verschiedenen Hardwarearchitekturen mit unterschiedlichen Eigenschaften eine hohe Performance erzielen. Die Basisdaten der Join-Pipeline werden als In-Memory-Tabellen inklusive Metadaten bereitgestellt, und der Join-Plan (bestehend aus zwei bis sieben Joins ohne andere Operatoren) ist vorgegeben. Ziel ist es, die End-to-End-Laufzeit bis zur vollständigen Berechnung der Ergebnis-In-Memory-Tabelle zu minimieren. Implementierungen können verschiedene Techniken nutzen, darunter Multithreading, Bloom-Filter, Join-Order-Optimierung, oder SIMD. Der Code wird auf unterschiedlichen Hardwareplattformen kompiliert und ausgeführt.

Vorlesungen:

  • 14.04.2025, 16 Uhr c.t.: Kickoff and Introduction [pdf, pptx, mp4]
  • 28.04.2025, 16 Uhr c.t.: Background Query Processing [pdf, pptx]
  • 12.05.2025, 16 Uhr c.t.: Background Query Compilation and Parallelization
  • 26.05.2025, 16 Uhr c.t.: Background Query Optimization
  • 09.06.2025, 16 Uhr c.t.: Experiments and Reproducibility
  • 14.07.2025, 16 Uhr c.t.: Project Presentations all Teams


Organization

  • Lecturer: Univ.-Prof. Dr.-Ing. Matthias Boehm, DAMS
  • Teaching Assistant: Christina Dionysio, DAMS
  • Project submission: Jul 08, 2025
  • Project presentations: Jul 14, 2025
  • Grading: passed ≥ 50% points