Dans le cadre d'une prestation pour l'Agence Régionale de la Biodiversité en île de France, nous nous sommes aperçus que la route /api/synthese/taxons_tree était très lente (parfois plus de 30 secondes) et donc pouvait partir en timeout.
Cette route fait appel à la vue gn_synthese.v_tree_taxons_synthese qui, pour résumer très rapidement, fait pas mal d'opérations sur la table taxonomie.taxref et fait une jointure sur la synthèse.
Cela a fait émaner quelques problèmes :
L'appel à cette route se fait dès l'arrivée dans le module de synthèse : elle devrait se faire au mieux au clic de l'arbre taxonomique dans la recherche taxonomique avancée
Pour encore d'avantage de performances, il pourrait être intéressant de faire un appel à une API lorsque l'utilisateur déplie un nœud. Cela permettrait d'obtenir uniquement les données dont a besoin d'utilisateur
La jointure à la table de synthèse fait ralentir la requête et empêche la création d'une vue matérialisée qui serait mise à jour à chaque mise à jour de Taxref. Cela rejoint les discussions de cette PR sur pourquoi les filtres taxonomiques de la synthèse sont basés sur les données en synthèse. : https://github.com/PnX-SI/GeoNature/pull/2591#issuecomment-1617557315.
Il pourrait être aussi possible de mettre en place du caching pour ne pas avoir à lancer la requête à chaque fois. Le problème que cela soulève est l'invalidation de ce cache lors de nouvelles entrées dans la synthèse...
Les nombreuses jointures à la table taxonomie.taxref pourraient être améliorées par la creation d'index (j'essaierai de faire une PR dans ce sens) :
CREATE INDEX i_taxref_ordre ON taxonomie.taxref USING btree (ordre);
CREATE INDEX i_taxref_classe ON taxonomie.taxref USING btree (classe);
CREATE INDEX i_taxref_phylum ON taxonomie.taxref USING btree (phylum);
CREATE INDEX i_taxref_lb_nom ON taxonomie.taxref USING btree (lb_nom);
CREATE INDEX i_taxref_famille ON taxonomie.taxref USING btree (famille);
Bonjour,
Dans le cadre d'une prestation pour l'Agence Régionale de la Biodiversité en île de France, nous nous sommes aperçus que la route
/api/synthese/taxons_tree
était très lente (parfois plus de 30 secondes) et donc pouvait partir en timeout.Cette route fait appel à la vue
gn_synthese.v_tree_taxons_synthese
qui, pour résumer très rapidement, fait pas mal d'opérations sur la tabletaxonomie.taxref
et fait une jointure sur la synthèse.Cela a fait émaner quelques problèmes :
taxonomie.taxref
pourraient être améliorées par la creation d'index (j'essaierai de faire une PR dans ce sens) :N'hésitez pas à me dire ce que vous en pensez !