Cholo Programando

Cholo Programando

Compartir

Subo contenido relacionado con la programación, con un sabor un poco distinto 🌮

31/07/2022

Diferencia entre Eager Loading y Lazy Loading en ORMs.

Hace unos días en el trabajo me encontré con esta query que tardaba 1:30 minutos en ejecutarse. Como podrán imaginarse este tiempo, para traer una lista de 400 cursos, es una gran mi**da.

Descubrí por la mala que mi ORM por defecto hacía Lazy Loading. Lo que quiere decir que:

Cada Curso tiene un Estado, Nivel, Tipo y varias Tags. Con Lazy Loading lo que ocurre es que el ORM primero trae los Cursos y después, por cada Curso envia una query para traer su respectivo Estado, Nivel, Tipo y Tags. Obviamente, en 400 Cursos esto resulta en 400 * 4 solicitudes.

Esto es porque el Lazy Loading no es para que traigas todas las tablas asociadas (Estado, Nivel, Tipo, Tags) con tu tabla principal (Cursos). Si quieres hacer esto debes usar Eager Loading. Lo que hace es crear una sola query en la que solicita tu tabla principal y todas sus tablas asociadas (en el caso mío, solicita todos los Cursos y sus respectivos Estado, Nivel, Tipo y Tags).

Tras aplicar esta modificación conseguí que la query pase de 1:30 minutos a 5-9 segundos, lo que es una gran mejora. Pero sigue siendo lento para mí. Así que seguiré investigando donde mas se puede optimizar.

Lo que si es seguro, es que voy a agregar Redis (para cachear los resultados, y reducir aun mas los tiempos).

How do you install git-filter-repo? 16/05/2022

Como crear un nuevo GIT repo a partir de un directorio de tu repo actual (manteniendo el historial de commits correspondiente a dicho directorio).

Si, tremendo título jaja. Pero ese fue el problema que tuve que resolver hoy y me pareció interesante compartirles como fue el proceso para solucionarlo.

Primeramente tenemos que clonar (git clone) el repositorio del que queremos sacar el directorio (y su historial de commits).

Una vez con esto listo, podriamos usar el comando "git filter-branch" pero... GIT tira muchas advertencias y parece ser que no es recomendable.

Por lo que vamos a optar por git-filter-repo, que es un proyecto accesible desde GitHub que agrega el comando "git filter-repo" para que consigamos nuestro objetivo. (Esto puede servirles para instalarlo https://superuser.com/a/1563783)

Una vez con el comando "git filter-repo" funcionando (para verificar esto podes correr el comando sin argumentos y te debería devolver "Faltan argumentos"):

git filter-repo --subdirectory-filter NOMBRE_DIRECTORIO

Esto va a hacer que, ahora, la root de tu proyecto sea dicha carpeta (NOMBRE_DIRECTORIO). Va a remover todo menos ese directorio, y solo va a dejar los commits que tengan que ver con este.

Lo que procedería ahora es cambiar la remote branch asociada a tu repo local, para mandarle estos cambios.

De este modo mantenes el historial de commits y tenes una solución elegante a tu problema!

Ojalá les sirva, nos vemos en el próximo capitulo!

How do you install git-filter-repo? I'm attempting to use git-filter-repo to remove large binaries from my repository. I have not used python before. I installed the latest python by clicking on the downloaded .exe file as that is a

¿Quieres que tu empresa sea el Compañía De Medios mas cotizado en Monserrat?
Haga clic aquí para reclamar su Entrada Patrocinada.

Teléfono

Dirección

Olivos 2022
Monserrat
1087