Popravčí meč, nebo španělská bota? Rozdíl, který v muzeu poznáte

Z Mazovia

Řešením je dávkování a cachování. Místo aby každý resolver volal databázi sám, posbírejte identifikátory z jednoho taktu vykonávání a načtěte je jedním dotazem s klauzulí IN. Knihovny pro dávkové načítání tohle řeší za vás, ale musíte je správně zapojit do kontextu požadavku, jinak si cache poteče mezi uživateli a vrátíte data, která někomu nepatří. To je druhá častá chyba: sdílená instance dávkovače místo instance vázané na jeden požadavek. Výsledkem je únik dat, který se projeví až v produkci.

Častou chybou je spoléhat na to, že se postel vejde do výtahu. Výtah mívá nízký strop a úzké dveře. Raději si dopředu změřte vnitřní prostor kabiny a porovnejte s nejdelším dílem postele. Pokud výtahem neprojde, zbývá schodiště nebo okno. Okno je krajní řešení, které vyžaduje odborníky a často i jeřáb. U panelového domu to bývá nemožné.

Okvětní olej z růží se dá vyrobit dvěma způsoby: macerací ve studeném oleji a macerací za tepla. Studená cesta trvá déle, ale zachová víc vonných látek. Teplá cesta je rychlejší, zato hrozí, že se olej přepálí a získá pach spáleniny. Pro domácí použití je nejspolehlivější studená macerace, protože ji nelze snadno zkazit a nevyžaduje žádné zvláštní vybavení.

Základem je správná surovina. Sbírejte květy růží, které nejsou chemicky ošetřené a pocházejí z čistého prostředí. Nejlepší jsou plné, čerstvě rozvinuté květy, ne povadlé nebo napadené plísní. Květy nikdy nemyjte vodou pod tekoucím proudem — vlhkost v oleji podporuje žluknutí a plísně. Pokud jsou květy prašné, jemně je otřete suchým hadříkem nebo štětcem.

Prvním signálem je chuť a vůně vody. Pokud voda chutná po chloru, kovu nebo zemi i po přefiltrování, náplň už nezachycuje rozpuštěné látky. Druhým je průtok: když voda teče ze filtru výrazně pomaleji než dřív, póry náplně se ucpatily a voda se protlačuje přes nasycený materiál. Třetím je tlak v systému — u některých typů filtrů se zvyšuje tlak před náplní, což poznáte podle pomalejšího napouštění nebo hučení.

Filtrační náplň má konečnou životnost a její opotřebení nepoznáte jen podle barvy vody. Většina lidí ji mění, až když voda zapáchá nebo je zakalená, ale to už je pozdě — filtr dávno přestal plnit svou funkci a jen drží vodu v oběhu. Abyste tomu předešli, sledujte pět konkrétních projevů, které ukazují, že je čas náplň vyměnit.

Typická chyba návštěvníka je, že si vše fotí a čte popisky až doma. Udělejte to obráceně. Nejprve si přečtěte text na cedulce, teprve pak zvedněte foťák. U exponátů s tmavými legendami bývá text delší a obsahuje odkazy na archivní prameny. Když tam žádný pramen uveden není, berte příběh jako vyprávění, ne jako historii. Stejně tak nevěřte každému průvodci, který tvrdí, že nástroj „pamatuje" stovky poprav. Většina předmětů se dochovala bez záznamu o konkrétním případu.

Hloubka, komplexita a limity, které se nesmí vynechat GraphQL umožňuje klientovi poskládat libovolně hluboký dotaz. Bez omezení stačí jeden škodlivý nebo jen neopatrný požadavek a server padne. Zaveďte výpočet komplexity: každému poli přiřaďte váhu, násobení polí v seznamech zohledněte odhadem velikosti a celkovou hodnotu před spuštěním odmítněte, pokud překročí limit. Zároveň nastavte maximální hloubku vnoření. Pozor na chybu, kdy se hloubka počítá po fragmentech a klient ji obejde jejich zřetězením. Fragmenty proto rozviňte ještě před kontrolou.

Nakonec cachujte na více úrovních. Krátkodobá cache pro entity, které se nemění každou sekundu, a perzistentní cache pro výsledky náročných agregací. U invalidace buďte konzervativní: raději kratší platnost než riziko, že klient uvidí zastaralá data. Mezi běžné chyby patří i ignorování pole, která klient nevyžádá, a zbytečné načítání vztahů, jež se nikdy nezobrazí. Před nasazením si napište testovací sadu reprezentativních dotazů a měřte počet databázových operací i latenci. Bez měření se každá optimalizace změní v hádání a hádání v GraphQL nefunguje.

Než začnete věřit cedulce, ověřte si tři věci. Za prvé, zda jde o originál, repliku, nebo rekvizitu z filmu. Za druhé, zda je nástroj vystaven v kontextu soudního práva, nebo jen jako senzační doplněk. Za třetí, zda popisek uvádí století. Právě chybějící datace je nejčastější past. Bez ní si legendu o „nástroji z dob temna" vymyslíte sami a odnesete si ji jako fakt.

Nejčastější příčina pomalého GraphQL není databáze ani síť, ale to, že resolver na pole v seznamu spouští samostatný dotaz pro každou položku. Tomuto vzorci se říká N+1 a vzniká nepozorovaně: nadřazený resolver vrátí pole objektů a každý podřízený resolver si pak sáhne do databáze zvlášť. U stovky položek to znamená stovku dotazů tam, kde měl být jeden. První krok optimalizace není měnit schéma, ale změřit, kolik dotazů jeden požadavek skutečně vyvolá. Zapněte logování na úrovni dotazů a spočítejte je pro typické operace. Teprve čísla ukážou, kde je problém.