Nadměrné načítání v GraphQL, které zabíjí váš server

Z Mazovia

Na studený macerát potřebujete čistou sklenici, kvalitní nosný olej a trpělivost. Květy zbavte zelených lístků u kalichu — ty do oleje nepatří, protože zbytečně barví a mohou dráždit pokožku. Naplňte sklenici květy do tří čtvrtin, zalijte olejem tak, aby byly zcela ponořené, a uzavřete. Nechte stát dva až tři týdny na tmavém místě při pokojové teplotě. Každý den sklenicí protřepejte. Po dvou přeceďte přes plátno nebo husté sítko, květy vymačkejte a tekutinu slijte do tmavé lahvičky. Skladujte v chladu a spotřebujte do šesti měsíců.

Dále se vyplatí omezit, co může klient žádat. Persistované dotazy nebo allowlist schválených operací odstraní většinu ad-hoc dotazů, které nikdo nepotřebuje. V kombinaci s krátkou cache na úrovni jednotlivých polí snížíte zátěž i bez změny resolverů. Pozor ale na cacheovaná pole, která závisí na uživateli – pokud je klíč cache pouze název pole, dostane jeden uživatel data druhého. To je bezpečnostní chyba, ne jen výkonnostní.

Nejúčinnější trik je miska s jedlou sodou. Nasypte do malé otevřené nádoby dvě lžíce sody a postavte ji do lednice, spížky nebo na linku. Soda pohlcuje pachy ze vzduchu, dokud se nevyčerpá – vydrží asi měsíc, pak ji vyměňte. Stejně funguje i v koši nebo ve skříňce pod dřezem. Pokud pach pochází z odpadu, nasypte do něj půl hrnku sody a zalijte hrnkem octa. Nechte pět minut šumět, pak spláchněte horkou vodou. Tento postup opakujte jednou týdně, dokud zápach nezmizí.

Poslední věc, kterou lidé podceňují, je úložný prostor. Malý balkon nemá sklep, takže se v něm hromadí věci, které tam nepatří. Vyhraďte jednu uzavřenou bednu, do které se vejde nářadí, hadice a sezónní dekorace. Všechno ostatní, co tam leží celý rok a nepoužíváte to, odneste do sklepa nebo vyhoďte. Prázdná plocha na balkoně je lepší než plná plocha věcí, které jen překážejí.

Většina týmů, které v roce 2026 nasadí GraphQL, řeší po měsíci provozu stejný problém: jeden dotaz z mobilní aplikace dokáže stáhnout data za celý týden a databáze padá na CPU. Přitom stačí pochopit, že GraphQL sám o sobě neoptimalizuje nic. Naopak přesouvá odpovědnost za efektivitu z backendu na klienta. Kdo to nepochopí, skončí s resolvery, které volají databázi rady pro rekonstrukci každé pole zvlášť, a s latencí, která roste kvadraticky s hloubkou dotazu.

Zastav na místě chráněném od větru. Nečekej, že to přejde za pochodu. Sundej mokré vrstvy – pot je stejně nebezpečný jako déšť. Oblékni suchou izolační vrstvu a přes ni nepromokavou. Přidej čepici a rukavice, i když se zdá, že to není potřeba. Dej si do sebe něco teplého a sladkého, ale ne alkohol. Pokud se do deseti minut nezačneš oteplovat, túru ukonči. Návrat je vždy lepší než pokračovat a riskovat, že se stav zhorší.

Malý balkon v paneláku má většinou kolem tří metrů čtverečních a jedny dveře. Nemá smysl ho předělávat, stačí přestat bojovat s tím, co tam je. Než začnete cokoli kupovat, změřte si šířku podlahy, výšku zábradlí a vzdálenost mezi dveřmi a protější stěnou. Nákres na papír vám ušetří dvě cesty do obchodu a jedno zklamání.

Světlo řešte jen tam, kde ho opravdu potřebujete. Místo velké lampy na stojanu použijte světelný řetěz zavěšený podél zábradlí nebo na háčcích ve zdi. Připevněte ho tak, aby nevisel v cestě, když procházíte. Zásuvka na balkoně většinou není, takže počítejte s prodlužovačkou ze dveří – tu ale veďte po zemi u zdi, ne středem, abyste o ni nezakopávali.

Hloubka, komplexita a limity, které musí být vynucené Bez tvrdých limitů na hloubku a komplexitu dotazu vám GraphQL umožní, aby klient poslal rekurzivní dotaz a položil server. Počítejte komplexitu staticky ještě před spuštěním resolverů. Každému poli přiřaďte váhu, vynásobte ji odhadem počtu vrácených položek a sečtěte. Pokud výsledek překročí nastavený práh, dotaz odmítněte s chybou, ne s prázdnou odpovědí. Prahy nastavte podle reálného provozu, ne podle dojmu. A hlavně: limit hloubky sám o sobě nestačí, protože útočník se vejde do hloubky pět a přesto vytáhne statisíce záznamů.

U světlých stěn (bílá, krémová, světle šedá) máte největší volnost. Tmavá pohovka vytvoří jasný střed místnosti a pokoj opticky zmenší, ale dodá mu hloubku. Středně tmavá nebo barevná pohovka naopak místnost rozveselí. U tmavých stěn je to obráceně: světlá pohovka je čitelná a prostor nezavalí, tmavá pohovka stejného odstínu jako stěna vytvoří klidnou, ale těžkou stěnu. Pokud chcete pokoj opticky zvětšit, držte pohovku i stěny ve stejné světelné hodnotě a rozdíl dělejte jen v textuře.

Druhá věc je N+1 problém. GraphQL k němu přímo vybízí, protože každý resolver je na sobě nezávislý. Řešením není ruční cachování, ale dávkování a odkládání. Načtěte všechny klíče, které resolver potřebuje, v jednom kole, a výsledky přiřaďte zpět. Pokud používáte databázi, ověřte si, že dávkování skutečně proběhne v jednom dotazu. Častá chyba je, že vývojář přidá dávkovací vrstvu, ale zapomene ji použít u vnořených polí, takže se problém přesune o úroveň níž.