Aller au contenu

SQL VIEWS

Ce document présente des tests pour utiliser les vues SQL, et plus globalement SQL . Un exemple d'utilisation: Pack de coupons aves sql views

Liens Utiles

Branche de Tests

SQL Views

Nous utilisons la gem Scenic pour générer et gérer les vues SQL via les migrations Rails. Pour plus d'informations, consultez la documentation de Scenic : Scenic GitHub Repository.

Avantages

  • Optimisations internes : Les requêtes enregistrées dans les vues bénéficient d'optimisations internes à SQL.
  • Clarté du code : Les requêtes complexes sont encapsulées dans les vues, permettant d'accéder à ces données via des requêtes plus simples ou des modèles basés sur les vues.
  • Centralisation de la logique : En centralisant la logique dans une seule requête, il est possible de concentrer les efforts d'optimisation.

Inconvénients

  • Caché dans le dossier db/views : Les requêtes sont cachées, ce qui nécessite de les rechercher dans le dossier db/views. Leur mise à jour nécessite des migrations supplémentaires.

Vues Matérialisées

Les vues matérialisées enregistrent en base le résultat d'une vue SQL, ce qui accélère considérablement les requêtes. Cependant, cela entraîne une désynchronisation des données, car il est nécessaire de rafraîchir manuellement les résultats (via des triggers SQL, du code Rails, des tâches cron, etc.).

Tentative d'Optimisation

Cette idée est inspirée de l'article suivant : Materialized View Strategies Using PostgreSQL.

Objectif

Le but est de stocker les données issues d'une vue dans une table.

Méthodologie

  1. Ajout d'une colonne d'expiration : Cette colonne (timestamp ou booléen) permet de déterminer si une ligne est obsolète.
  2. Création d'une vue : Cette vue récupère les données à partir de la table, en sélectionnant à la fois les lignes valides(directement) et les lignes obsolètes après les avoir mises à jour via une fonction SQL utilisant un CROSS JOIN.
  3. Triggers/Fonctions SQL : Ajout d'une liste de triggers et de fonctions SQL pour mettre à jour la table (insertion de lignes, suppression de lignes, passage en obsolète des lignes).