Zum Hauptinhalt springen

Datenbanken

OpenVLE nutzt drei verschiedene Datenbanksysteme, die jeweils auf unterschiedliche Aufgaben spezialisiert sind: MariaDB für strukturierte Kerndaten, MongoDB für Aktivitäten und Logs sowie Redis als Task-Queue und Cache.

Übersicht

DatenbankTypGespeicherte DatenPersistenz
MariaDBRelational (SQL)Kernentitäten: Benutzer, Rollen, Berechtigungen, Umgebungen, Veranstaltungen, VMs, VM-VorlagenVolume ./mariadb/data
MongoDBDokumentbasiert (NoSQL)Aktivitäten, System-Events, Audit-Logs, ÄnderungsverläufeVolume ./mongodb
RedisIn-Memory (Key-Value)Task-Queue, Cache, Worker/Scheduler-KommunikationAOF-Persistenz (appendonly yes)

MariaDB

MariaDB ist die primäre Datenbank und speichert alle strukturierten Kernentitäten des Systems:

  • Benutzer und Rollen — Konten, Rollenzuweisungen, Passwort-Hashes
  • Berechtigungen — Berechtigungsdefinitionen und Zuordnungen (siehe Berechtigungssystem)
  • Umgebungen und Veranstaltungen — Kursumgebungen, Veranstaltungstermine, Teilnehmerzuordnungen
  • VMs und VM-Vorlagen — Virtuelle Maschinen, deren Status und Zuordnung zu Veranstaltungen
  • Systemeinstellungen — Globale Konfiguration und Einstellungen

Initialisierung und Migration

Beim ersten Start übernehmen die Backend- und Worker-Container automatisch die Datenbank-Initialisierung und -Migration. Welcher Container die Migration durchführt, wird über einen Lock-Mechanismus gesteuert — der Container, der den Lock zuerst erhält, führt die Migration aus. Dabei werden das Datenbankschema erstellt und initiale Daten angelegt (z. B. der Standard-Administrator-Account und die Standard-Berechtigungen).

MongoDB

MongoDB speichert nicht-relationale Daten, die keine feste Tabellenstruktur erfordern:

  • Aktivitäten — Benutzeraktionen (z. B. "Benutzer X hat VM Y gestartet"), die in der Aktivitätsübersicht der Benutzeroberfläche angezeigt werden

Der Zugriff erfolgt ausschließlich über das Backend. MongoDB ist nicht direkt von außen erreichbar.

Redis

Redis dient nicht als klassische Datenbank, sondern als Kommunikationsschicht zwischen den Anwendungskomponenten:

  • Task-Queue — Das Backend reiht Aufgaben in Redis-Queues ein, die vom Worker abgearbeitet werden (siehe Task-System)
  • Scheduler-Queue — Der Scheduler legt periodische Aufgaben in Redis ab
  • Cache — Temporäre Zwischenspeicherung für häufig abgerufene Daten

Redis ist mit AOF (Append Only File) konfiguriert, sodass die Queue-Daten auch nach einem Neustart erhalten bleiben. Der Zugriff ist passwortgeschützt.

Abgrenzung der Datenbanken

Die Aufteilung auf drei Systeme folgt dem Prinzip, jede Datenbank für ihren Stärkenbereich einzusetzen:

AnforderungDatenbankBegründung
Strukturierte Daten mit RelationenMariaDBFremdschlüssel, Transaktionen, ACID-Garantien
Flexible, schemalose DokumenteMongoDBVariierende Dokumentstrukturen, effizientes Logging
Schnelle Queue-OperationenRedisIn-Memory-Geschwindigkeit, native Queue-Unterstützung

Weiterführende Informationen