Proč se n+1 dotazy objevují a jak tomu předejít?
Když se začneme bavit o n+1 dotazech, je to téma, které mi nedává spát. Zkoušel jsem najít nějaké důvody, proč se tohle děje, ale pořád mám v hlavě spoustu otázek. Jak se to stane, že při práci s GraphQL nebo s databázemi obecně narazíme na tento problém? Je to snad způsobeno špatnou strukturou dat nebo nevhodným návrhem schématu? Mám pocit, že často je problém v tom, jakým způsobem se dotazy generují. Proč se třeba neprovádí hromadné dotazy místo toho, aby se každý jednotlivý prvek načítal zvlášť? Dalo by se říct, že to může být i problém s optimalizací, ale proč se o tom více nemluví? Je důležité vědět, jak správně nastavit relace mezi entitami, aby se předešlo tomuto nešvaru. Měl by člověk více dbát na použití loaderů či jiných technik pro minimalizaci počtu dotazů? Jakou roli hraje caching a jak moc může zlepšit výkon aplikace? Není to náhodou i o tom, že si vývojáři nemusí být vědomi efektivity svých dotazů? Možná je to i tím, že si neuvědomují dopady svých rozhodnutí na výkon aplikace. Co když se třeba ani neptají na správné věci a tíhnou k obvyklým vzorům místo toho, aby hledali kreativní řešení? Jaká opatření by měl každý vývojář zvážit už při návrhu API, aby se těmto problémům vyhnul? Třeba existují nějaké best practices, které by měl každý dodržovat. Opravdu je možné mít na paměti všechna tato rizika a přesto vytvořit efektivní a uživatelsky přívětivé API? V neposlední řadě mě zajímá, zda jsou nástroje jako GraphQL nebo ORM opravdu schopny pomoci nám vyhnout se těmto chybám. Jak si tedy můžeme pomoci? Myslíte si, že je třeba buď použít specializované knihovny nebo prostě víc experimentovat s různými technikami optimalizace?