Pomalé dotazy v GraphQL: kde nejčastěji ztrácíte výkon

Z Mazovia
Wersja z dnia 23:49, 27 paź 2026 autorstwa PennyP5696231 (dyskusja | edycje) (Utworzono nową stronę "Květináče nedávejte na podlahu, kde zaberou každý centimetr. Zavěste je na vnitřní stranu zábradlí pomocí háčků, které se jen přehnou přes hranu, a na stěnu připevněte mřížku na popínavé rostliny. Těžké nádoby patří dolů, lehké nahoru. U paneláku počítejte s tím, že balkon je vystavený větru; vysoké květináče s mělkým kořenem se převrhávají. Volte spíš nižší, širší nádoby a rostlinám dopřejte samozavlaž…")
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)

Květináče nedávejte na podlahu, kde zaberou každý centimetr. Zavěste je na vnitřní stranu zábradlí pomocí háčků, které se jen přehnou přes hranu, a na stěnu připevněte mřížku na popínavé rostliny. Těžké nádoby patří dolů, lehké nahoru. U paneláku počítejte s tím, že balkon je vystavený větru; vysoké květináče s mělkým kořenem se převrhávají. Volte spíš nižší, širší nádoby a rostlinám dopřejte samozavlažovací vložku, jinak je v horkých dnech budete zalévat dvakrát denně.

Typická chyba je spoléhat na to, že „dítě už je velké a ví, co dělá". Děti mladší šesti let nemají dostatečně vyvinutou schopnost odhadnout riziko, a to ani ve spánku. Další častou chybou je použití obyčejné matrace na horním lůžku – musí být přesně stejně velká jako rošt, bez mezer po stranách. Pokud se matrace posouvá, vzniká nebezpečná štěrbina. Zkontrolujte také, zda lůžko stojí na rovném místě a zda se nekýve; uvolněné šrouby dotáhněte a pravidelně je přezkoušejte.

Hloubka dotazu a náklady, které nikdo nepočítá Druhá past je neomezená hloubka a šířka dotazu. Klient může legálně poskládat dotaz, který rekurzivně projde celý graf a vrátí násobek dat, se kterým jste nepočítali. Zaveďte analytiku dotazu ještě před vykonáním: spočítejte hloubku, počet polí a odhadněte náklady podle vah jednotlivých typů. Nad limit dotaz odmítněte s jasnou chybou. Pozor na to, že samotná hloubka nestačí, protože jeden list může vracet tisíce záznamů; važte i to.

Základem je oddělit probouzení od vstávání. Ten, kdo musí vstát dřív, by měl mít vše připravené už večer: oblečení, budík, sluchátka a věci do koupelny. Ranní přesun po pokoji pak zabere minimum času a hluku. Budík nastavte na vibrace nebo na tichý tón, který se nedá přeslechnout jen proto, že leží na nočním stolku u druhého. Mobil s budíkem položte tak, abyste ho museli fyzicky vzít do ruky – to vás donutí vstát a vypnout ho dřív, než začne obtěžovat partnera.

GraphQL není pomalejší než REST. Pomalé bývají dotazy, které někdo napsal bez ohledu na to, kolik dat se pod nimi skutečně načte. Než začnete cokoliv optimalizovat, změřte to. Zapněte si ve vývojovém prostředí trasování resolverů a podívejte se, které pole spotřebovává nejvíc času. Bez měření skončíte u přepisování toho, co není problém, a skutečné úzké hrdlo zůstane nedotčené.

U stránkování se vyhněte offsetům u velkých a často měněných kolekcí. Kurzorové stránkování podle stabilního klíče je předvídatelnější a levnější. Zároveň hlídejte, aby se v odpovědi nevracela pole, která klient nepoužije — selektivní načítání sloupců v databázi je často větší zisk než jakákoliv změna na úrovni schématu.

Pozornost věnujte čtyřem oblastem. První je příjem vody a močení – zvýšená žízeň a častější močení patří mezi první příznaky cukrovky, onemocnění ledvin i dělohy. Druhá je dech: pes, který v klidu dýchá rychleji nebo má při nádechu rozšířené nozdry, může mít problém s dýchacím ústrojím nebo srdcem. Třetí je srst a kůže – matná srst, lupy nebo olizování jednoho místa do lysin často ukazují na svědění, parazity nebo hormonální nerovnováhu. Čtvrtá je pohyb: sledujte psa zepředu i zezadu při chůzi, zda nevykračuje asymetricky nebo nezatěžuje jednu končetinu.

Nejčastější chyba je N+1 dotaz. Klient požádá o seznam položek a u každé si vyžádá navazující data. Resolver je načítá jeden po druhém, takže z jednoho dotazu vzniknou stovky dotazů do databáze. Řešením je dávkování: posbírejte klíče z jednoho cyklu vykonávání a načtěte je jedním dotazem, výsledky pak rozdělte zpět. Knihovny pro dávkování načítání tohle umí za vás, ale musíte je zapojit do kontextu požadavku, ne do globálního stavu.

Cacheování má smysl jen tam, kde znáte kontext. Autorizovaná data nekešujte pod klíčem, který ignoruje uživatele nebo oprávnění. Pro veřejná a neměnná data naopak nastavte kešovací hlavičky a označte pole tak, aby se invalidace dala provést cíleně. Pokud invalidujete celou keš při každé změně, výkon se vrátí tam, kde byl.

Nakonec schéma. Příliš obecné typy a pole, která vrací všechno, nutí resolvery dělat práci, kterou klient nepotřebuje. Rozdělte velké objekty, zaveďte jasné vstupy pro filtrování a odstraňte pole, která nikdo nepoužívá. Sledujte provoz a pole bez využití po pár měsících zahoďte. Optimalizace není jednorázový úkol, ale pravidelná údržba.

Čtvrtá věc je podlaha. Na beton nebo starou dlažbu se položí rohož z odolného materiálu, která se dá vyklepat a umýt. Nezatěžujte balkon těžkými keramickými dlaždicemi bez izolační podložky; v paneláku se vlhkost pod nimi drží a dřevo začne plesnivět. Páté řešení je osvětlení: místo prodlužovačky z pokoje použijte solární lampičku na zábradlí, ušetříte si vedení kabelu přes dveře a riziko, že o něj zakopnete.