Tengo un caso de uso en el que tengo algunas funciones complejas (que involucran agregaciones) que tardan unos segundos en ejecutarse y afectan la UX de la aplicación (incluso cuando las filas tienen solo 25-30k y los campos relevantes están indexados). Estoy pensando en almacenar las agregaciones en la propia base de datos (y ejecutarlas todas las noches) ya que el tiempo real de los datos no es muy importante aquí. ¿Es esa una práctica común con Django?
(Sin embargo, no pude encontrar mucha discusión sobre eso en SO)
Tienes varias opciones:
El enfoque de @ittus y @Andrey Shipilov : almacene el resultado en un sistema de caché como Memcache o redis. Puede consultar github.com/niwinz/django-redis
El enfoque de @Anonymous : use algún tipo de vista materializada (depende de su base de datos) y luego cree un modelo no administrado en django para consultarlo.
Cree nuevos modelos/campos para datos agregados y descúbralo todas las noches a través de un comando personalizado de django o una tarea de apio.
Conclusiones:
Darse cuenta: