SEPTEMBER 21 -22, 2023 - LILLE, FRANCE & ONLINE
COMMENT UTILISER UNE MATERIALIZED VIEW POSTGRESQL AVEC API PLATFORM ?
Materialized view, késako ?
Introduction
Implémentation
What’s next ?
Exemple/Démo
01
02
03
04
05
01 - Introduction
À propos de moi
Damien LEVALLOIS
Questions à l’assemblée
Qui connait les materialized views ?
Qui a des requêtes complexes qui posent des problèmes de performance ?
02 – Materialized view, késako ?
Description
Résultat d’une requête complexe mis en cache.
Données stockées physiquement.
On peut y rajouter des clés primaires ainsi que des index.
Syntaxe de création/suppression
CREATE MATERIALIZED VIEW [IF NOT EXISTS] table_name
[ (colonne1, colonne2, …)]
AS query
[WITH [NO] DATA]
DROP MATERIALIZED VIEW [IF EXISTS] table_name
Rafraichissement
REFRESH MATERIALIZED VIEW [CONCURRENTLY] table_name
[WITH [NO] DATA]
CONCURRENTLY a besoin de l’existence d’un index unique sur la view.
Mapping sur une ressource
Mapping sur une ressource
Mapping sur une ressource
Avantages
Inconvénients
La genèse du projet
Contexte
Application de gestion de stock de véhicules
80% des pages sont des tableaux
Recherche « floue » faite via elastic search
Demande de réduire la stack technique
Manipulation données
ERP
Export données CSV
Import application
Indexation elastic
Schéma données
Véhicule
Site
- libelle
Marque
- libelle
Pole
- libelle
Modèle
- libelle_origine
- libelle
- puissance
Famille
- libelle_origine
- libelle
SuiviVente
Finition
- libelle
Moteur
- énergie
- type_boite
Silhouette
- libelle
Teinte
- libelle_origine
- libelle
Options
- code
- libelle
Evenement
Type: livraison
Where
SuiviVente.state <> ‘vendu_livre’ or
e.Date > 1 month ago
Avant
Recherche utilisateur
Recherche Elastic
Récupération d’un tableau d’ids
Query builder -> where id IN :ids
Après
Création materialized view
Concaténation des éléments de recherche dans un seul champ
Id, recherche
Après
ERP
Export données CSV
Import application
Mise à jour de la materialized view
Après
Recherche utilisateur
Sub query dans la view
Query builder -> where id IN sub_query
03 – Implémentation
Création/suppression
Attribut
Commande création/suppression
Commande création/suppression
Commande création/suppression
Mise à jour
Asynchrone
Asynchrone
Asynchrone
Pool handler
Pool handler
Pool handler
Et API platform dans tout ça ?
Extra properties
…
Extra properties
Request listener
Response listener
Résumé
Request listener
ViewPoolHandler
Extra properties
Processor?
Listener workflow?
Autre traitement métier
->add()
Response listener
->handleRefresh()
Refresh view event
Messenger (asynchrone)
->dispatch()
DB
refresh view
04 – What’s next ?
What’s next ?
What’s next ?
Request listener
ViewPoolHandler
Extra properties
Processor?
Listener workflow?
Autre traitement métier
->add()
Response listener
->handleRefresh()
Refresh view event
Messenger (asynchrone)
->dispatch()
DB
refresh view
Unicité message
New/update/delete
05 – Exemple/Démo
Schéma données
Véhicule
Marque
Options
Concession
Région
5 options les plus vendues par marque et par région ?
Requête
Performances
10000 véhicules
160 ms
Vs
30 ms
50000 véhicules
200 ms
Vs
30 ms
150000 véhicules
700 ms
Vs
30 ms
Code démo
Code démo
Code démo
Code démo