Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Stats annuelles et mensuelles du nombre de simulations en fonction des institutions #4764

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

Shamzic
Copy link
Contributor

@Shamzic Shamzic commented Dec 11, 2024

  • Changement: nombre de simulations apr institutions sur 6 mois -> sur 1 an
  • Nouveau: nombre de simulations par mois par institution

Précède betagouv/mes-aides-analytics#221

Copy link
Contributor

@jenovateurs jenovateurs left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Je suis ok sur la fonctionnalité, mais pas sur l'impact côté BDD.
Je ne connais pas le nombre de consultations de cette page de stats, car on n’a pas mis de tracking. Mais le coup de la requête est lourd. Je propose donc une mise en cache du calcul sur n-1 à n-11 et un rafraîchissement de la data sur n si on veut être précis. Afin de limiter le calcul récurrent sur 1 an. Qu'en penses-tu @Shamzic ?

@Shamzic
Copy link
Contributor Author

Shamzic commented Dec 16, 2024

Je suis ok sur la fonctionnalité, mais pas sur l'impact côté BDD. Je ne connais pas le nombre de consultations de cette page de stats, car on n’a pas mis de tracking. Mais le coup de la requête est lourd. Je propose donc une mise en cache du calcul sur n-1 à n-11 et un rafraîchissement de la data sur n si on veut être précis. Afin de limiter le calcul récurrent sur 1 an. Qu'en penses-tu @Shamzic ?

Ok pour ta proposition, je suis d'accord qu'il y a de la redondance qu'on pourrait supprimer. Je me demandes juste sur quel calcul tu t'es basé pour estimer la lourdeur de la requête et de quelle manière veux-tu mettre cela en cache ?

@jenovateurs
Copy link
Contributor

jenovateurs commented Dec 18, 2024

Ok pour ta proposition, je suis d'accord qu'il y a de la redondance qu'on pourrait supprimer. Je me demandes juste sur quel calcul tu t'es basé pour estimer la lourdeur de la requête et de quelle manière veux-tu mettre cela en cache ?

Il suffit de faire un explain sur MongoDb, voici les variantes pour les requêtes :
1 - $gt: new Date(new Date().setFullYear(new Date().getFullYear() - 1))
2 - $gt: new Date(new Date().setMonth(new Date().getMonth() - 6))

1 an

Screenshot 2024-12-18 at 17 13 43

6 mois

Screenshot 2024-12-18 at 17 14 36

Résultat

Doublement en terme de performance et de besoin en ressource même si je pense qu'on a un bon serveur.
On passe donc de 5 secondes à 11 secondes.

Solution

Création d'une nouvelle table avec mise en cache des données sur les 11 derniers mois. Ajout du nouveau mois en cache lorsqu'on passe au mois suivant. Et pour finir pour l'utilisateur :

  • jointure dans une vue sur Mongo entre la table en cache et le mois courant
    => une requête légère

Qu'en penses-tu ?

@Shamzic
Copy link
Contributor Author

Shamzic commented Jan 3, 2025

Intéressant cet outil, je ne connaissais pas! C'est curieux, je n'ai pas du tout les mêmes temps d'exécution sur la table des simulations en production. Comment as-tu obtenu la partie "projection_default" ?


Récupération des simulation des 12 derniers mois

{"createdAt": {$gt: new Date(new Date().setFullYear(new Date().getFullYear() - 1))}}

image


Récupération des simulations des 6 derniers mois

{"createdAt": {$gt: new Date(new Date().setMonth(new Date().getMonth() - 6))}}

image

Mis à part ce détail, j'ai aussi un temps d'exécution divisé par deux. Ta proposition semble pertinente et je suis d'accord pour stocker les stats en base, même si je ne suis pas certain que le coût de ce travail soit vraiment prioritaire et en vaille la peine (j'avais fait ce travail dans l'état d'esprit de proposer un truc rapidement car ce n'est pas une tâche prioritaire). Je vais essayer d'itérer un peu quand même 👍

@jenovateurs
Copy link
Contributor

Autre solution, il existe probablement un système de cache paramétrable dans MongoDb.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants