1 post / 0 new
Guest (not verified)
Když GraphQL zvolní, protože se dotaz rozpadl na stovky částí

První botičky nejsou jen módní doplněk. Pro batole znamenají zásadní změnu v tom, jak vnímá vlastní nohy a jak se učí chodit. Do té doby mělo volnost, mohlo kroutit prsty, cítit povrch. Najednou je tu něco, co drží tvar a tlačí na citlivá místa. Proto je normální, že první nazutí provází pláč a vztek. Nejde o rozmazlenost, ale o přirozenou reakci na neznámý pocit.

Před prvním použitím na větší ploše udělejte test na malém kousku kůže, hlavně pokud jste na rostlinné oleje citliví. Růžový olej nekonzumujte a nepoužívejte na otevřené rány. Pokud se objeví zarudnutí nebo svědění, přestaňte ho používat. Doma vyrobený olej nemá konzervanty, proto ho nenechávejte v koupelně u okna a vždy používejte čisté prsty nebo kapátko, aby se do lahvičky nedostaly nečistoty.

Základ je omezit hloubku a šířku dotazu už na vstupu. Stanovte maximální hloubku výběru a maximální počet objektů, které může jeden dotaz vrátit. Bez toho vám stačí jeden klient s cyklem a server padne. Pozor na dvě typické chyby: limit nastavený příliš vysoko, takže nic neřeší, a naopak příliš nízko, takže rozbije legitimní obrazovky. Limit se má odvozovat z reálných dotazů, které aplikace posílá, ne z odhadu. Druhá chyba je kontrola jen podle počtu znaků dotazu – krátký dotaz může přes spojení přeskočit stovky uzlů.

Nezapomínejte na perzistenci dotazů. Pokud klient posílá stále stejné dotazy, uložte si jejich hash a posílejte jen ten. Ušetříte přenos i práci s parsováním a validací. Zároveň tím získáte přehled o tom, které dotazy jsou nejdražší. Ten seznam pak berte jako priority pro optimalizaci, ne jako zajímavost do dashboardu. Poslední věc, která se v praxi podceňuje: testy výkonu. GraphQL se snadno testuje na malých datech a snadno selže na velkých. Načtěte do testovacího prostředí realistický objem a měřte, co se děje při souběhu více klientů. Výsledky z prázdné databáze nejsou výsledky.

U GraphQL také platí, že méně je více. Vyhněte se vracení celých velkých objektů, když klient potřebuje jen dvě pole. Resolver, který vždy načte všechny sloupce a teprve pak je ořeže, zbytečně zatěžuje databázi. Naopak je výhodné nechat databázi vrátit jen to, co je potřeba, a to i za cenu složitějšího kódu. Typický problém je i stránkování: kurzorové stránkování bývá stabilnější než skokové, hlavně když se data mezi požadavky mění. U skokového stránkování se snadno stane, že stejný záznam uvidíte dvakrát nebo ho naopak přeskočíte.

Sklony střechy znamenají, že velká část konstrukce je šikmá. Na šikminách lidé často připevňují desky rovnoběžně s krokvemi, protože se to zdá jednodušší. Jenže podélné spoje pak leží v jedné linii přes celou plochu a jakýkoli pohyb krovu se přenese do jednoho místa. Desky se mají klást kolmo na nosný rošt. Pokud to dispozice nedovolí, spoje alespoň přesazujte, nikdy nedávejte čtyři rohy desek do jednoho bodu. Spoj v kříži je nejslabší místo celé konstrukce a při montáži v podkroví, kde všechno pracuje, ho poznáte jako první.

Pozor na vlhkost. Úložný prostor pod postelí je uzavřený a špatně větraný. Textil, papír a kůže v něm plesniví, pokud je postel u studené zdi nebo na chatě, kde se netopí. Řešením je nechat mezi ukládanými věcmi mezery, nepěchovat je na doraz a jednou za čas prostor vyvětrat. Kartonové krabice jsou lepší než igelitové tašky, protože lépe propouštějí vzduch.

Do lednice patří jahody, borůvky, maliny, třešně, hroznové víno, citrusy a nakrájené ovoce. Naopak banány, avokádo, mango, papája a rajčata (i když to je technicky ovoce) do lednice nepatří. Chlad jim zastaví zrání, ale zároveň poškodí strukturu a ztratí chuť. Banány v lednici zčernají, avokádo zůstane tvrdé a pak náhle shnije. Pokud už je ovoce zralé a nechcete ho sníst hned, dejte ho do lednice až v ten moment, kdy ho chcete zpomalit. Jinak ho nechte při pokojové teplotě.

Batchování a cachování místo hrdinských optimalizací Největší zisk přinese dávkování. Místo aby každý resolver volal databázi sám za sebe, seskupte požadavky na stejný typ objektu do jednoho dotazu. V praxi to znamená použít nástroj pro batchování a načítání přes identifikátory. Funguje to ale jen tehdy, když resolvery nevoláte ručně uvnitř smyčky. Pokud si někde v kódu projdete pole a pro každý prvek zavoláte resolver, batchování neproběhne a jste zpátky na začátku. Stejně důležité je cachování na úrovni objektu: pokud se stejný záznam načítá v rámci jednoho požadavku vícekrát, druhý přístup má jít z paměti.

Nejčastější důvod, proč GraphQL v produkci přestane stíhat, není databáze ani server. Je to dotaz, který si klient poskládá příliš široce a resolver ho přeloží do stovek samostatných dotazů. Tomuto jevu se říká N+1 a v roce 2026 se nevyřeší sám tím, že přidáte další stroj. Řeší se naopak na úrovni návrhu schématu a způsobu, jakým klient skládá výběrové sady. První krok je vždy měření: zapněte si trasování resolverů a podívejte se, kolik dotazů na databázi vzniká pro jeden příchozí požadavek. Pokud jich je víc než jedna jednotka na objekt, máte co ladit.

Add new comment

Filtered HTML

  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Lines and paragraphs break automatically.

Plain text

  • No HTML tags allowed.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.

Navigation

User login