La dénormalisation

Revenir volontairement sur la normalisation pour lire plus vite : colonne recopiée, compteur précalculé, vue matérialisée ; ce que chaque technique coûte en écriture et en cohérence, et comment on garde les copies à jour.

  • 25 cartes
  • 5 thèmes
  • Gratuit

Le programme, thème par thème

Le poids de chaque thème suit celui que lui donne l'examen.

  1. Notions
  2. Questions
  3. Ranger et relier
  4. Mises en situation
  5. Comprendre

Quelques cartes du deck

  • Dénormalisation : de quoi s'agit-il ?

    Voir la réponse

    Choix délibéré d'ajouter de la redondance à un schéma normalisé pour accélérer certaines lectures.

    Ce n'est pas un schéma mal conçu : c'est un schéma d'abord normalisé, puis dégradé là où une mesure a montré que la lecture coûtait trop.

  • Quelle commande PostgreSQL met à jour une vue matérialisée nommée ventes_mensuelles ?

    • REFRESH MATERIALIZED VIEW ventes_mensuelles;
    • UPDATE MATERIALIZED VIEW ventes_mensuelles FROM ventes;
    • REFRESH VIEW ventes_mensuelles CONCURRENTLY;
    • ALTER MATERIALIZED VIEW ventes_mensuelles REFRESH;
    Voir la réponse

    REFRESH MATERIALIZED VIEW ventes_mensuelles;

    La syntaxe porte les trois mots REFRESH MATERIALIZED VIEW. Il n'existe ni UPDATE sur une vue matérialisée (on ne la modifie pas à la main) ni REFRESH VIEW.

  • Une … stocke le résultat de sa requête ; une vue ordinaire la réexécute à chaque lecture.

    Voir la réponse

    Une vue matérialisée stocke le résultat de sa requête ; une vue ordinaire la réexécute à chaque lecture.

    Le gain vient de la lecture sans jointure ni agrégat ; le prix est un contenu qui reflète la dernière actualisation, pas l'état courant.

  • Donnée dérivée : de quoi s'agit-il ?

    Voir la réponse

    Valeur qu'on pourrait recalculer à partir d'autres données de la base, mais qu'on stocke pour ne pas la recalculer, comme un compteur ou une somme.

    Elle est juste tant qu'on la met à jour à chaque changement de la source ; sinon elle diverge sans que la base le signale.

  • Une page d'accueil rejoue 2 000 fois par seconde une jointure sur cinq tables, dont les données changent une fois par jour. Quelle solution convient ?

    • Supprimer les clés étrangères pour accélérer les lectures
    • Une vue ordinaire (CREATE VIEW) sur la jointure, lue par la page
    • Passer la base en lecture seule en journée
    • Une vue matérialisée rafraîchie chaque nuit, lue par la page
    Voir la réponse

    Une vue matérialisée rafraîchie chaque nuit, lue par la page

    Un résultat stable recalculé à chaque lecture : on le calcule une fois et on le relit. Une vue ordinaire ne stocke rien et rejoue la jointure à chaque lecture. Mais mesurer et indexer d'abord reste la première étape.