3 Tech Stack

Als Tech Stack wird die Summe der verwendeten Technologien bezeichnet. Dazu gehören zum Beispiel die Programmiersprache, das Framework für die Web-Applikation, die Datenbanksoftware, aber auch die Entwicklungsumgebung und weitere Software, die im Entwicklungsprozess verwendet wird. [3]

3.1 Framework

Zuallererst muss das Framework zur Erstellung der Web-Applikation gewählt werden. Dieses legt die zu verwendende Programmiersprache fest und setzt möglicherweise Restriktionen in Bezug auf weitere Software. Eine Web-Applikation zeichnet sich dadurch aus, dass sie im Webbrowser ausführbar ist [4]. Der Webbrowser ist in der Lage, Dateien im HTML-Format (HTML: Hyper Text Markup Language [5]) darzustellen. Das HTML-Format spezifiziert dabei ausschließlich die Struktur der Webseite [5]. Um die visuelle Erscheinung der Webseite zu beeinflussen, können Regeln in CSS-Dateien (CSS: Cascading Style Sheet) hinterlegt werden [5]. Für interaktives Verhalten existiert die Sprache JavaScript, die es ermöglicht, das HTML-Dokument dynamisch anzupassen [5].

Ein Framework zur Erstellung von Web-Applikationen bietet ein Grundgerüst für Layout sowie Funktionalität und stellt einen Server bereit. Für das Layout werden beispielsweise makroskopische Komponenten, wie Dashboards und Landing Pages, oder mikroskopische Komponenten, wie Inputs, Tabellen und Plots, bereitgestellt. Die Funktionalität wird abstrahiert und der Zustand der Web-Applikation modelliert. Der Server bearbeitet Anfragen von Clients, also Nutzern der Web-Applikation. Frameworks können in beliebigen Programmiersprachen implementiert werden, solange eine Schnittstelle zwischen der vom Framework verwendeten Sprache und einer dem Browser verständlichen Sprache existiert. Frameworks können hinsichtlich verschiedener Kriterien unterschieden werden. Backend-Frameworks integrieren neben einem Server meist auch noch Datenbanken, wohingegen Frontend-Frameworks ihren Fokus mehr auf den visuellen Part legen. Multipage-Frameworks enthalten mehrere Seiten, wohingegen Singlepage-Frameworks nur eine einzige Seite darstellen. [6]

Für die Bearbeitung dieses Projektes wurde das Framework Shiny gewählt, das in der Programmiersprache R implementiert ist. Hierbei handelt es sich um ein Singlepage-Framework, das als Backend den sogenannten Shiny Server enthält [7]. Maßgeblich für die Entscheidung war, dass die beiden Autoren über Erfahrung im Umgang mit R und im Speziellen mit Shiny verfügen. Darüber hinaus zeichnet sich Shiny durch folgende Eigenschaften und Vorzüge aus [7]:

  • Moderne Templates
  • Fokus auf Funktionalität (Erleichterter Programmierprozess)
  • Reaktives Zustandsmodell
  • Modularisierbarkeit
  • Für Anwendungsfall ausreichende Performance
  • Einfache Integration von Datenbanken

3.2 Programmiersprache

R ist eine Multiparadigmen-Programmiersprache [8]. Je nach Anwendungsfall kann somit zum Beispiel objektorientiert oder funktional programmiert werden [8]. R verfügt über einen Pool an Standardbibliotheken und kann einfach durch selbstgeschriebene und frei verfügbare Packages erweitert werden [9]. Das Comprehensive R Archive Network (CRAN) stellt eine Vielzahl von quelloffenen Bibliotheken zur Verfügung wie zum Beispiel {shiny}, das die Funktionalitäten des Frameworks beinhaltet [10]. Die folgenden Tabellen 3.1 und 3.2 geben Aufschluss über die im Projekt verwendeten Packages und ihren Zweck. Packages können von anderen Packages abhängen. Es wird daher darauf verzichtet auf untergeordnete Bibliotheken einzugehen.

Tabelle 3.1: Packages für {shiny}
Package Beschreibung
{bs4Dash} [11] AdminLTE-Template
{DT} [12] DataTables für {shiny}
{htmltools} [13] HTML-Repräsentation in R
{rclipboard} [14] Zwischenablage
{shinydisconnect} [15] Verbindungsverlustbildschirm
{shinyjs} [16] Integration von Custom-JavaScript
{waiter} [17] Ladebildschirm
Tabelle 3.2: Packages für die Programmierung
Package Beschreibung
{Cairo} [18] PDF-/PNG-/SVG-Erstellung
{DBI} [19] Datenbankinterface
{dplyr} [20] Datentransformationen
{glue} [21] String-Erzeugung
{lubridate} [22] Datumsformat
{RSQLite} [23] SQLite-Datenbank
{stringr} [24] String-Manipulation
{tibble} [25] Tabellenformat
{purrr} [26] Funktionale Programmierung
{qrcode} [27] Erstellung von QR-Codes
{renv} [28] Packagemanagement
{yaml} [29] YAML-Dateiformat

3.3 Datenbank

Zur konsistenten Datenverwaltung wird eine Datenbank benötigt. Datenbanken sind in der Lage, Anfragen von verschiedenen Clients zu bearbeiten und dabei zu gewährleisten, dass bestimmte Regeln hinsichtlich der Datenstruktur und Ausprägung der Daten eingehalten werden [30]. Es existieren verschiedene Datenbankmodelle, unter anderem das Netzwerkdatenbankmodell, das objektorientierte, das hierachische oder das relationale Datenbankmodell [31]. Diese unterscheiden sich hinsichtlich der Verknüpfung der beteiligten Daten. Aufgrund der hohen Flexibilität und der weiten Verbreitung wurde das relationale Datenbankmodell ausgewählt. Dieses speichert die Daten in miteinander verknüpften Tabellen [30]. Die Tabellenzeilen enthalten Beobachtungen, die Tabellenspalten stellen die beobachtbaren Merkmale dar. Zur eindeutigen Identifikation erhält jede Zeile eine Identifikationsnummer. Die Spalte der Identifikationsnummern wird als Primärschlüssel (Primary Key) bezeichnet [30]. Um verschiedene Tabellen miteinander zu verknüpfen, werden Identifikationsnummern referenziert. Eine Spalte, die auf einen Primärschlüssel einer anderen Tabelle verweist, wird als Fremdschlüssel (Foreign Key) bezeichnet [30].

Es gibt eine Vielzahl verschiedener relationaler Datenbankmanagementsysteme, die sich hinsichtlich ihrer Anwendungsbereiche und Skalierbarkeit unterscheiden. Für Projekte kleinen und mittleren Umfanges (unter 100.000 Aufrufe / Tag [32]) eignet sich SQLite. Hierbei werden alle Tabellen in einer einzigen Datei mit dem Suffix .sqlite gespeichert. Der Zugriff auf die Datenbank erfolgt grundsätzlich über die Structured Query Language (SQL). Für die Programmiersprache R gibt es die Packages {DBI} und {RSQLite}, die eine direkte Schnittstelle zur Datenbank bereitstellen.