UNIZAR-30226-2020-01 / backend_django

Backend usando Django
MIT License
0 stars 0 forks source link

Mejorar eficiencia #21

Closed nestor98 closed 4 years ago

nestor98 commented 4 years ago

Hay que ver dónde está el cuello de botella para que en los álbumes por ej el cliente tarde unos 3 segundos en cargarlos. Implementar paginación junto con los clientes (cf609850705e15bb133527b9047849c35889439d) y ver si podemos reducir el número de peticiones a este servidor al cargar álbumes, etc. si vemos que ese es el problema.

nestor98 commented 4 years ago

Si sobra el tiempo mirar desnormalización, por ejemplo con esto. Interesante para detalles de playlist (playlist->cancion->album->artista)

nestor98 commented 4 years ago

Aparentemente, el mayor problema es el lazy fetching: cuando un serializador devuelve una lista de varios objetos suele hacer una o más peticiones a la base de datos para cada uno. (1705 para la lista de canciones, por ejemplo).

Estudiar prefetch_related y select_related de django y/o caches (una implementacion popular), como en este articulo

nestor98 commented 4 years ago

Se ha mejorado mucho la velocidad con eager fetching (prefetch_related y select_related), y quitando algun bug que hacía que se actualizaran las letras de las canciones y las biografías de los artistas cuando no debían.

Además, los clientes han implementado paginación (en la api por defecto no se pagina, pero sí cuando se pasan los queryparams limit y offset)