¿Cómo RESOLVER el Problema del N+1? Tarde o temprano TE VA A TOCAR 💀

  Рет қаралды 30,590

hdeleon.net

hdeleon.net

Күн бұрын

El problema de N + 1 es un problema que tarde o temprano te vas a enfrentar como Programador, en este video te daré varias soluciones con sus ventajas y desventajas.
🍺 Mis Cursos de PROGRAMACIÓN: hdeleon.net/cu...
📚 Mis Libros
📖 Aprender a Programar con C#: hdeleon.net/li...
🤖 Mi Setup
🖥️ Mi Monitor: amzn.to/3dtnDkk
⌨️ Mi Teclado: amzn.to/3BtjKnq
⌨️ Mi Deck elgato: amzn.to/3dvEKC3
🎧 Mis Orejeras: amzn.to/3BwQYm0
🎤 Mi Micrófono: amzn.to/3qPvFHh
00:00 Introducción
00:36 ¿Qué es el problema N + 1?
01:57 La base de datos
03:20 Solución clásica
06:29 INNER JOIN
08:37 Memoria
12:03 Forma EXTRA: JSON desde SQL
Si quieres apoyarme y darme para una cerveza puedes hacerlo por aquí: paypal.me/Hecto...
Puedes apoyarme desde 0.5 USD al mes uniéndote como miembro al canal aquí: / @hdeleonnet
🐦Twitter: / powerhdeleon
🌎Mi Sitio web: hdeleon.net
📻Raw Radio en Spotify: open.spotify.c...
#programación #dev #programming

Пікірлер: 95
@hdeleonnet
@hdeleonnet Жыл бұрын
Mis Cursos de Programación: hdeleon.net/cursos-premium/ Mi Nuevo Libro: hdeleon.net/libro-aprender-a-programar-con-c-hector-de-leon/
@oreoslawiet355
@oreoslawiet355 Жыл бұрын
Cómo puedo conseguir tu libro con un autógrafo?
@rafageist
@rafageist Жыл бұрын
Y hay mas variantes.... pero depende del problema a resolver
@benjaminsepulveda1664
@benjaminsepulveda1664 Жыл бұрын
Excelente video, solo agregar que si quieres ver el rendimiento de las consultar utilizar explain para ver el plan de ejecucion y ver los costes de performance de la query, para los casos donde se necesite performance
@keiryliza
@keiryliza Жыл бұрын
HACK!!! Temazo, desde ya esperamos el truco de la carga perezosa. ¡Gracias por el contenido, saludos! ❤
@sentadoensilla
@sentadoensilla Жыл бұрын
Desde que descubri las funciones json en postgres, uso la tercera forma
@_LeoDev
@_LeoDev Жыл бұрын
Buena esa la del JSON, no muy común. Ver C# me hizo recordar mis inicios 🥲 Buen contenido 💪
@sarracenogamer7375
@sarracenogamer7375 Жыл бұрын
Muy bueno el video, me acaba de pasar el problema y tus ejemplos me han venido de maravilla para elegir la solución acertada, esperando el video con el "lazy" :)
@ZohKrahM
@ZohKrahM 8 ай бұрын
La segunda, en lugar de traer todas las cervezas, se podría traerlas filtradas de la base y ya.
@saulantoniomorquechocela5381
@saulantoniomorquechocela5381 Жыл бұрын
Los primeros dos los utiliza a pero no sabía que eran algo ya específico, pero el último me voló la cabeza ahora a investigar que tanto le pega al performance
@ivanmr6742
@ivanmr6742 Жыл бұрын
Ese metodo con Json es muy bueno 🤘
@galaxynote795
@galaxynote795 3 ай бұрын
Brutal!! ☠️
@dennmendezdel
@dennmendezdel 6 ай бұрын
Excelente video.
@DestroyWolves
@DestroyWolves Жыл бұрын
Qué opinas del manejo de datos en tablas verticales, donde cada registro represente un valor de un encabezado relacionado y no una columna como se acostumbra ¿En qué casos es optimo usarlo?
@LeonardoVargasL
@LeonardoVargasL Жыл бұрын
Muchas gracias! Lo entendí. Tuve está pregunta en una entrevista y no supe cómo responder😢
@matsoft.oficial
@matsoft.oficial Жыл бұрын
Gracias Cabezón me has ayudado a resolver un problema de n + 1
@joseangelsanchez5357
@joseangelsanchez5357 Жыл бұрын
Utilizando el .Include() vendría siendo lo mismo que el JOIN, no? Saludos, gracias por tu contenido.
@Lidamster
@Lidamster Жыл бұрын
Muy buen aporte esa forma de conseguir el JSON, no la conocía! Sin embargo, creo que no es la mejor opcion para la salud de la BD. Para ella es preferible devolver la info desnormalizada y en formato tabla que andar utilizando recursos en generar un JSON
@pablonardi4416
@pablonardi4416 Жыл бұрын
Muy buen video. Me encantó. Me sirvió mucho cuando mostraste como hacerlo desde la DB
@midscarlosespinoza
@midscarlosespinoza Жыл бұрын
Me gusto la parte de las tripes comillas, esa no me la sabia 😀
@christopher8229
@christopher8229 Жыл бұрын
Gran aporte. Muchas gracias
@emersson7x
@emersson7x Жыл бұрын
Interesante... 🤨👌👌👌🧐 Buen video, gracias por el aporte. 👍
@jonathansantos6000
@jonathansantos6000 Жыл бұрын
Excelentes soluciones, eres un crack
@danielhernandezmanzano6116
@danielhernandezmanzano6116 10 ай бұрын
Genial!!, buen video Gracias :)
@Magistrado1914
@Magistrado1914 11 ай бұрын
Excelente vídeo y contenido. Visto en 04/03/2024
@elgertz447
@elgertz447 Жыл бұрын
Con todo viejo ❤
@girondavidfour
@girondavidfour Жыл бұрын
Gracias por compartir este conocimiento. PDT: Quiero ver la forma perezosa jajaja. Me identifica :/
@GermanMacias
@GermanMacias Жыл бұрын
en java se hace la consulta jpa con join fetch, y la propiedad del objeto se declara como Lazy :P
@odingaming5698
@odingaming5698 Жыл бұрын
El metodo del json no lo conocia, me lo apunto para futuro
@jesussotillo107
@jesussotillo107 11 ай бұрын
Hector y meter un .select despues del where para traer la data que necesitas que ventejas o desventajas nos da?
@EnanoForro
@EnanoForro Жыл бұрын
No sabia que se podia generar el Json desde SQL. A partir de que version esta esa funcionalidad? O siempre se pudo hacer y recien me entero? Buen video
@danielsanchez928
@danielsanchez928 Жыл бұрын
Es algo nuevo, pero no se desde que versión. En versiones viejas de SQL Server, se podía devolver un fichero csv
@murphishouse
@murphishouse Жыл бұрын
Hola Héctor te harías un video de programar y configurara para alta disponibilidad, para muchos usuarios?
@nazgulresebo
@nazgulresebo Жыл бұрын
Lo malo del where/contains es que lo va traducir a un IN en SQL y tiene un límite. Está bien chida la tercera opción jaja
@fabioalfonso2144
@fabioalfonso2144 Жыл бұрын
Hola amigo, a que limite te refieres?, no encontre documentacion sobre el tema, podrias aclararme la duda?
@nazgulresebo
@nazgulresebo Жыл бұрын
@@fabioalfonso2144 Linq traduce esas expresiones a una consulta SQL. Sería una consulta de este estilo SELECT * FROM TABLE WHERE CAMPO IN ('VALO1', ..., 'VALORN'), pero lo que hay dentro del IN tiene un límite. Esto dice la documentación: Explicitly including an extremely large number of values (many thousands of values separated by commas) within the parentheses, in an IN clause can consume resources and return errors 8623 or 8632. To work around this problem, store the items in the IN list in a table, and use a SELECT subquery within an IN clause.
@nazgulresebo
@nazgulresebo Жыл бұрын
@@fabioalfonso2144 Lo que pasa es que linq traduce ese tipo de expresiones a una consulta de este estilo: SELECT * FROM TABLE WHERE CAMPO IN ('V1', ... , 'VN'). Lo que va dentro del IN tiene un límite. Esto dice la documentación: Explicitly including an extremely large number of values (many thousands of values separated by commas) within the parentheses, in an IN clause can consume resources and return errors 8623 or 8632. To work around this problem, store the items in the IN list in a table, and use a SELECT subquery within an IN claus
@juanscasado
@juanscasado Жыл бұрын
Gracias!
@Gabyy_Intenta
@Gabyy_Intenta 10 ай бұрын
Hay alguna relaciôn con Lazy Loading y N+1?
@miguelprado9388
@miguelprado9388 Жыл бұрын
aquí iniciamos un nuevo semestre
@rodolfotovartorres
@rodolfotovartorres Жыл бұрын
que no ibas a actuar como snape para el reboot de harry poter no lo digo yo, lo dijo brais moure , como siempre gracias por compartir tu conocimiento saludos hermoso
@hdeleonnet
@hdeleonnet Жыл бұрын
😂
@MesacMovies
@MesacMovies Жыл бұрын
Lo de JSON es una locura!
@erickdiaz3553
@erickdiaz3553 Жыл бұрын
Que opinas de usar un SP para obtener los datos y un DTO para resolver este problema ?
@lucaseto
@lucaseto 7 ай бұрын
Include???
@dev_crios
@dev_crios Жыл бұрын
Ya que últimamente estas tomando vino , por respeto a la cerveza, deberías dejar de usarla en los ejemplos.
@chybeat
@chybeat Жыл бұрын
No me gusta la onda "hardmetalera: (y no fué por lo que vine aqui), así que excelente video... un suscriptor más :).. PD: Los unicornios de Colores y las nubes de algodon son lo mio! 🦄🌈
@jose6433
@jose6433 Жыл бұрын
men, pregunta en serio, con esto puedo ser jefe de proyectos ya?
@andresleonardo9686
@andresleonardo9686 Жыл бұрын
Que hay del SelectAll?
@acmesoft
@acmesoft Жыл бұрын
Yendo un poco más allá del contenido del video que me pareció excelente: Hago unas preguntas desde mi ignorancia. Usar Queryable no presta ninguna ventaja con el tema del uso de memoria tanto en el servidor SQL y el de backend para este caso? (creería que sí pero como no conozco bien en profundidad no quisiera arriesgar, o sólo dilata el tiempo en cuando se ejecuta la consulta en el servidor de base de datos) (¿este caso que nombré es al que le llamas carga perezosa?)
@hdeleonnet
@hdeleonnet Жыл бұрын
ToList() regresa List, no IQueryable
@geovannimv3854
@geovannimv3854 Жыл бұрын
Siempre que hay un video nuevo trato de no perdermelo, excelente video. Gracias!!! Tienes algún curso de Azure Files, Blobs? Saludos!
@juan.olivas
@juan.olivas Жыл бұрын
La del JSON me falta por implementar, ese escenario lo resolvía con el método anterior al json
@lhmendoza6083
@lhmendoza6083 Жыл бұрын
2016 me parece.
@juan.olivas
@juan.olivas Жыл бұрын
??@@lhmendoza6083
@nazgulresebo
@nazgulresebo Жыл бұрын
Se ve que conoces mucho de cervezas deberías de abrir un canal al respecto.
@academic3044
@academic3044 Жыл бұрын
Estimado Hector, mi hermano excelente video. Tengo una pregunta que requiero que me ayudes, re4sulta que tengo una DB que cada año crece en 10 millones de registros en en una cierta tabla de la DB, ya que cada 10 minutos almacena información que se tiene que si o si guardar como histórico. Que solución me aconsejas para evitar que después de varios años las consultas comiencen a ser mas lentas por la abrumadora cantidad de datos? Seria bueno dividirlo varias DB o migrar a un servidor RDS de AWS por ejemplo con mayor capacidad?. Por favor me ayudas con tu experiencia en esto, necesito tomar una decisión sabia.
@TheLinkrs
@TheLinkrs Жыл бұрын
Para ese caso de uso lo mejor es Sharding
@erimaykenta
@erimaykenta Жыл бұрын
Bastante elegante!!
@ItaloGuevara-f1b
@ItaloGuevara-f1b Жыл бұрын
Ya quiero ver la forma perezosa
@Dan98475
@Dan98475 Жыл бұрын
Nuevo video pendiente..., 2.1k...
@cesarolivera117
@cesarolivera117 Жыл бұрын
Ya llego a 2k likes, haz el video de "Carga perezosa"
@AlexanderSosa-t3w
@AlexanderSosa-t3w 3 ай бұрын
Puto maestro en Conceptos...optimizado
@omarsanchezcuevas8309
@omarsanchezcuevas8309 Жыл бұрын
Hoy me levanté recordándo que hace unos meses estaba sufriendo por esto sin saber que era el famoso n+1 Tu video me ha sido de mucha ayuda para entder el problema ✌️
@luxdev4719
@luxdev4719 Жыл бұрын
Crear un arreglo de objetos hijos para cada elemento padre, es lo que mas utilizo en mi día a día. Este video es un buen material para aquellos que aun no saben como lidiar con este asunto.
@sienfil
@sienfil Жыл бұрын
Con la segunda opción le agregas un rompimiento de control y listo, los programadores de los 80's y 90's lo usaban, inician e imprimen la maca, mientras sea igual imprimen las cervezas y solo la vuelven a imprimir la marca cuando cambie. Es como agrupar se usa mucho para informes que tienen que totalizar por algún grupo. como dice Héctor cuando tienes montones de datos y en un servidor remoto viene el problema, otra que yo uso es UNION ALL y uso campos combinados con un identificador que me dirá que es cada uno, por ejemplo un Id, campo clase y un campo ordenador, el Id identifica si es una marca o cerveza, el campo clase irían las marcas y las cervezas y el ordenador, lo va a poner todo en su lugar, para informes complejos como los contables o financieros funcionan ya que la carga queda a cargo del servidor SQL y no de la aplicación, hacer esos cálculos por c# resultaran lentos.
@cguimaraenz
@cguimaraenz Жыл бұрын
Buenas noches! Creo que te refieres al INNER JOIN, cierto? El problema no está en la presentación de los datos, que como bien dices, se puede formatear a gusto, sino en la carga de información viajando desde el servidor de la DB, ahí es donde se hace costosa la repetición de información. Saludos!
@sienfil
@sienfil Жыл бұрын
Hola@@cguimaraenz, como alguna vez lo dijo Ector, hay que ver a sql como un lenguaje de programación y no como un lenguaje de consulta, lo cual nos permite jugar con los datos, en el ejemplo lo que planteo es que en una misma columna se almacena las marcas y las cervezas y una columna identificador la cual nos dice que es, marca o cerveza, se imprime uno debajo del otro sin repetir, lo cual nos da mayor velocidad si los datos fuesen mas extensos. para eso sirve UNION o UNION ALL, combina datos.
@juliocrey1
@juliocrey1 Жыл бұрын
@@sienfil Es lo que pensé. Escribí la consulta para pegarla aquí pero no me lo permite KZbin. Hablas de un primer select con inner join entre marcas y cervezas, luego un union con marcas. Queda todo en una sola columna pero al primer select se le puede hardcodear " - " para diferenciar las cervezas de las marcas. Y sí, se traen solamente 13 registros en una sola columna, solo lo que se va a mostrar en pantalla. Maquina cliente y red no afectadas, servidor haciendo una subquery pero supongo que el Json también lo hace.
@tortorhl
@tortorhl Жыл бұрын
Te pases de v*rg yo me llamo Héctor León... pense que era el unico. Edito: ¡Espero el vídeo de carga perezosa, nuevo sub!
@carlossantanagonzalezlopez3270
@carlossantanagonzalezlopez3270 7 ай бұрын
Algo tan sencillo y que nadie explica
@andreij2589
@andreij2589 Жыл бұрын
Si HdeLeon es tan bueno porque no hay HdeLeon2?
@marliote
@marliote Жыл бұрын
Be unique
@JJsCR98
@JJsCR98 Жыл бұрын
Yo para todo eso solo hago SP de lo que ocupo y desde BackEnd solo hago un llamado. Claro siempre full JSON, la mejor opcion es la ultima.
@argeliodelarosarodriguez6730
@argeliodelarosarodriguez6730 Жыл бұрын
Eso tiene un costo tremendo en BD, primero tiene que hacer subqueries, luego transformar el resultado en json y de ahí transmitir el json a la aplicación, lo cual implica también costo a nivel de red. Si no se va a usar el resultado como un json en la aplicación, entonces, al llegar el resultado habría que deserializar la data, lo cual implicaría otro costo adicional.
@JJsCR98
@JJsCR98 Жыл бұрын
@@argeliodelarosarodriguez6730 Si puede ser un problema, yo lo que hago son consultas super optimizadas, con campos necesarios solamente, claro que me ayudo con los indices, lo que hago es monitoriar siempre los query ya si veo mal echo no lo hago por SP, si los resultados de las consultas son consistentes lo meto un tabla de cache para evitar consultas innecesarias a la BD, sobre el nivel de red comprimo los datos del JSON antes de enviarlos, es dependiendo de lo que se requiera tiene sus pros y contras se puede usar Protocol Buffers o MessagePack, que son más ligeros en términos de tamaño y más rápidos de serializar/deserializar. Esto es importante que no influya negativamente el performance del sistema. Por lo que es importante realizar pruebas y mediciones para evaluar el impacto de cada cambio en el rendimiento y la eficiencia.
@RickychavezDeveloper
@RickychavezDeveloper Жыл бұрын
usted hizo pacto con el chamuco para ser tan pro
@youtekdev8131
@youtekdev8131 Жыл бұрын
Directo al grano como debe ser.
@togacentral
@togacentral 5 ай бұрын
Chingón....
@cesaresp9585
@cesaresp9585 Жыл бұрын
Carga Héctorosa
@Ross96D
@Ross96D Жыл бұрын
Y las views?
@eduardohidalgo2720
@eduardohidalgo2720 Жыл бұрын
ya vi que en 03:38 pusiste FK no es mejor no usarla?
@hdeleonnet
@hdeleonnet Жыл бұрын
Entonces ve a usar NoSQL
@ez7125
@ez7125 Жыл бұрын
save
@marliote
@marliote Жыл бұрын
Jod como sabes que no di like jaja, bueno bueno toma tu like, gracias por tu contenido
@cyberkiller83
@cyberkiller83 4 ай бұрын
Villano de película infantil jajajaja
@david1791100
@david1791100 Жыл бұрын
Ya ya ya le di like, mil disculpas 😂
@tqmqjym
@tqmqjym Жыл бұрын
👍🏼
@mnlo
@mnlo Жыл бұрын
me pillaste no le habia dado like aun xD
@agustinsimiand400
@agustinsimiand400 Жыл бұрын
añado un comentrio
8 ай бұрын
HAS ECHO LINQ ANIDADO ?
@hdeleonnet
@hdeleonnet 8 ай бұрын
kzbin.info/www/bejne/qGm3mWV7jrqJkLs
@dragonnegro4413
@dragonnegro4413 Жыл бұрын
Quejón 😂😂😂
@elaprendiz7208
@elaprendiz7208 Жыл бұрын
🤣🤣🤣🤣🤣🤣👋🏼🇩🇴🇮🇹
LAZY LOADING para Bases de Datos | Entity Framework C# .NET
12:06
¿Cuánto se GANA Programando en C# .NET?
13:17
hdeleon.net
Рет қаралды 17 М.
Каха и дочка
00:28
К-Media
Рет қаралды 3,4 МЛН
My scorpion was taken away from me 😢
00:55
TyphoonFast 5
Рет қаралды 2,7 МЛН
PRUEBA TÉCNICA para TRABAJAR como PROGRAMADOR
26:18
hdeleon.net
Рет қаралды 14 М.
¿Qué es un ORM? ¿Reemplazará a SQL?
13:51
EDteam
Рет қаралды 98 М.
¿Qué es el PROBLEMA N+1 y como SOLUCIONARLO?
8:27
Pull Request
Рет қаралды 6 М.
My Programmer STACK with which I MAKE MONEY
10:49
hdeleon.net
Рет қаралды 3,4 М.
¿Por qué Debes Aprender ARQUITECTURA de SOFTWARE?
20:34
hdeleon.net
Рет қаралды 33 М.
Cosas que NO SABES de C#
16:17
hdeleon.net
Рет қаралды 16 М.
APRENDE MATEMÁTICAS DESDE CERO. Nivel Básico
3:12:22
Matemáticas con Juan
Рет қаралды 4,8 МЛН
Como Aprendí a Programar en 3 Meses y Conseguí una Oferta
8:33
Nico Salgado
Рет қаралды 595 М.
Notación Big O Explicado con Código
17:15
hdeleon.net
Рет қаралды 18 М.