Aller au contenu principal

Bases de données

OpenVLE utilise trois systèmes de bases de données différents, chacun spécialisé pour des tâches distinctes : MariaDB pour les données structurées principales, MongoDB pour les activités et les journaux, ainsi que Redis comme file d'attente des tâches et cache.

Vue d'ensemble

Base de donnéesTypeDonnées stockéesPersistance
MariaDBRelationnelle (SQL)Entités principales : utilisateurs, rôles, permissions, environnements, événements, VMs, modèles de VMVolume ./mariadb/data
MongoDBDocumentaire (NoSQL)Activités, événements système, journaux d'audit, historiques de modificationsVolume ./mongodb
RedisIn-Memory (Key-Value)File d'attente des tâches, cache, communication Worker/SchedulerPersistance AOF (appendonly yes)

MariaDB

MariaDB est la base de données principale et stocke toutes les entités structurées du système :

  • Utilisateurs et rôles — Comptes, attributions de rôles, hachages de mots de passe
  • Permissions — Définitions de permissions et attributions (voir Système de permissions)
  • Environnements et événements — Environnements de cours, dates d'événements, affectations de participants
  • VMs et modèles de VM — Machines virtuelles, leur statut et leur affectation aux événements
  • Paramètres système — Configuration globale et paramètres

Initialisation et migration

Lors du premier démarrage, les conteneurs Backend et Worker prennent automatiquement en charge l'initialisation et la migration de la base de données. Le conteneur qui effectue la migration est déterminé par un mécanisme de verrouillage — le conteneur qui obtient le verrou en premier effectue la migration. Le schéma de la base de données est alors créé et les données initiales sont mises en place (par exemple le compte administrateur par défaut et les permissions par défaut).

MongoDB

MongoDB stocke des données non relationnelles qui ne nécessitent pas de structure de table fixe :

  • Activités — Actions des utilisateurs (par exemple "L'utilisateur X a démarré la VM Y"), affichées dans la vue d'ensemble des activités de l'interface utilisateur

L'accès se fait exclusivement via le Backend. MongoDB n'est pas directement accessible de l'extérieur.

Redis

Redis ne sert pas de base de données classique, mais de couche de communication entre les composants de l'application :

  • File d'attente des tâches — Le Backend met les tâches dans les files d'attente Redis, qui sont traitées par le Worker (voir Système de tâches)
  • File d'attente du Scheduler — Le Scheduler place les tâches périodiques dans Redis
  • Cache — Stockage intermédiaire temporaire pour les données fréquemment consultées

Redis est configuré avec AOF (Append Only File), de sorte que les données de la file d'attente sont conservées même après un redémarrage. L'accès est protégé par mot de passe.

Séparation des bases de données

La répartition sur trois systèmes suit le principe d'utiliser chaque base de données dans son domaine de prédilection :

ExigenceBase de donnéesJustification
Données structurées avec relationsMariaDBClés étrangères, transactions, garanties ACID
Documents flexibles sans schéma fixeMongoDBStructures de documents variables, journalisation efficace
Opérations de file d'attente rapidesRedisVitesse en mémoire, prise en charge native des files d'attente

Informations complémentaires