J'ai stocké de nombreux enregistrements de mesures d'énergie dans un modèle.Mise en cache des données traitées en django
Mes utilisateurs ont besoin d'accéder fréquemment à un rapport d'énergie utilisé, donc un model.manager est chargé pour interroger beaucoup d'enregistrements, appliquer un algorithme qui prend ~ 2 secondes, ce qui est beaucoup de temps, j'ai testé memcached mais avec pas de chance car après un certain temps, les données mises en cache ne sont pas disponibles, mais les utilisateurs reviennent souvent pour voir les mêmes rapports. Donc ma solution potentielle à ce problème de performance est de stocker les données traitées (pas seulement le jeu de requêtes mais le jeu de données après l'application de l'algorithme) dans un modèle appelé "ProcessedData".
Ainsi, lorsque l'utilisateur est invité à accéder au rapport d'énergie, le gestionnaire en charge interrogera d'abord ProccessData et si ProccessData.objects.filter(field1='field1').exist()
: les données renvoyées seront directement transmises au modèle pour la visualisation. Si les données requises n'ont pas été préalablement requises, le gestionnaire chargé devra appliquer l'algorithme et renvoyer la demande à l'utilisateur.
Est-ce une bonne approche?
Lorsque je traite les données en utilisant en entrée le résultat d'une requête Je sais que la requête et même la requête qui est envoyée à l'utilisateur est mise en cache lorsque j'utilise memcache de johny-cache, le problème apparaît lorsque ces données sont requises 12 heures plus tard peut-être un jour, dans ce cas et selon la quantité d'interaction avec d'autres utilisateurs , les données traitées initialement mises en cache ne sont pas disponibles. – Jaime
Avez-vous essayé quelque chose comme le décorateur @cached de django-cache-utils? combinez cela avec un backend de cache personnalisé qui n'expire jamais la mise en cache (le cache de johnny par exemple le fait puisque django ne supporte pas "forever") et vous avez la mise en cache des résultats persistants –