N+1 problém v adminu e-shopu: jeden dotaz místo tisíce
Přehled objednávek, který se s růstem e-shopu zpomaluje, obvykle netrpí špatným designem stránky — trpí špatným počtem databázových dotazů.
N+1 problém je jeden z nejčastějších a nejsnáz přehlédnutelných výkonnostních chyb v administrativních rozhraních. Jméno popisuje přesně, co se děje: jeden dotaz načte seznam záznamů (třeba 100 objednávek), a pak se pro KAŽDOU z nich pošle další dotaz na související data (jméno zákazníka, položky objednávky). Výsledek: 1 + 100 dotazů místo jednoho.
Proč to nejde vidět na první pohled
Se dvaceti objednávkami v databázi je rozdíl neznatelný — stránka se načte za zlomek sekundy tak jako tak. Problém se projeví až s růstem: tisíc objednávek znamená tisíc jedna dotazů, a admin, který byl při vývoji rychlý, se v produkci s reálným objemem dat začne zpomalovat. Bez záměrného testu na velkém objemu dat tohle projde nepovšimnuté až do chvíle, kdy si klient stěžuje.
Řešení: jeden agregovaný dotaz
Přehled objednávek na Fotobazoš.cz je postavený tak, aby zákazníka, položky i stav objednávky natáhl jedním agregovaným dotazem — ne dotazem na každou objednávku zvlášť. Admin tak zůstává rychlý bez ohledu na to, jestli má e-shop dvacet objednávek, nebo deset tisíc.
Proč tohle rozhoduje o tom, kdo web spravuje
Fotobazoš.cz obsluhuje majitelka bez technického zázemí, sama. Admin, který se s růstem objednávek zpomaluje, znamená frustraci z každodenní práce a nakonec potřebu volat vývojáře na to, co mělo fungovat samo. Výkon administrativního rozhraní není luxus pro velké firmy — je to podmínka, aby laik zvládl provoz e-shopu bez cizí pomoci.
Případová studie
Fotobazoš.cz
Zobrazit případovou studii →