Když GraphQL začne zpomalovat: jak omezit dotazy a udržet výkon
Rošt rozhoduje o tom, jak dlouho matrace vydrží a jak dobře se vyspíte. Špatná volba se projeví dvěma způsoby: matrace se v místě největší zátěže propadne nebo se naopak uprostřed vyboulí, a páteř ztrácí oporu. Než rošt koupíte, změřte si vnitřní rozměr postele a zjistěte, z jakého materiálu je jádro matrace. Teprve pak má smysl řešit lamely, rám a nosnost.
Desky kladej na rošt křížem, nikdy ne na spáru, a šrouby utahuj tak, aby hlavička vlezla pod povrch, ale desku neprotrhla. Právě u nerovného stropu se vyplatí zkontrolovat rovinu ještě před šroubováním desek – po přišroubování už ji neopravíš bez demontáže. Pokud se ti i po seřízení objeví v rovině vlna, hledej příčinu v nedotaženém závěsu nebo v profilu, který se dotýká stropu a je podepřený.
Matrace a rošt musí tvořit jeden celek. Paměťová pěna potřebuje pevný, rovný podklad — na měkkém pružinovém roštu se „utopí" a ztratí oporu. Latexová matrace naopak sedne na pružný rošt s hustšími lamelami. Taštičkové pružiny ocení rošt, který se prohýbá rovnoměrně, ne po jednotlivých lamelách. U postele s roštem z pevných desek počítejte s tím, že matrace musí být dostatečně tuhá sama o sobě, jinak se po pár měsících prohne do tvaru těla.
Před rozhodnutím si položte matraci na rošt a lehněte si na ni na pět minut. Sledujte, kde se tělo propadá a kde naopak tlačí. Pokud se matrace prohýbá už při prvním položení, rošt je příliš měkký. Pokud se naopak nedotýká lamel rovnoměrně, je křivý nebo lamely chybí. Rošt, který tohle zvládne, vydrží roky a matraci prodlouží životnost — a to je nakonec to, co od postele doopravdy chcete.
Hloubková analýza dotazů jako prevence Druhým krokem je analýza samotného dotazu ještě před jeho vykonáním. Server by měl umět změřit hloubku dotazu, počet polí a odhadovanou náročnost. Na základě toho se nastaví limity, které zabrání jak neúmyslným chybám, tak útokům typu denial of service. Prakticky to znamená zavést middleware, který dotaz projde, spočítá jeho složitost a případně ho odmítne srozumitelnou chybou. Důležité je limity nezvolit příliš přísně, jinak začnou padat i legitimní dotazy. Osvědčuje se začít s měkkými limity, logovat jejich překročení a teprve po nasbírání dat je zpřísnit.
V neposlední řadě je třeba myslet na cachování na úrovni celého dotazu. GraphQL umožňuje poslat stejný dotaz s různými proměnnými. Pokud se nemění struktura dotazu, ale jen hodnoty, lze výsledek cachovat podle hashované struktury a proměnných. To výrazně sníží zátěž databáze u opakovaných dotazů. Pozor ale na autorizaci: cachovaná data nesmí uniknout jinému uživateli. Proto se do klíče musí zahrnout identita volajícího nebo jeho oprávnění.
Na závěr: optimalizace GraphQL není jednorázový úkol. Vyžaduje průběžné sledování metrik, jako je počet resolverů na dotaz, doba odezvy a počet databázových volání. Bez měření se žádné vylepšení neprojeví. A pokud se něco pokazí, je lepší mít připravený fallback, který dotaz odmítne dřív, než zahltí systém.
Prvním krokem je uvědomit si, že GraphQL sám o sobě není optimalizační nástroj. Je to dotazovací jazyk a běžící server musí každý dotaz přeložit na konkrétní datové operace. Pokud se pole resolveru nechovají efektivně, vzniká takzvaný N+1 problém: rodičovský dotaz vrátí seznam položek a pro každou z nich se spustí samostatný dotaz do databáze. Řešením je dávkování (batching) a cachování na úrovni resolverů. Osvědčený vzor je seskupit požadavky na stejný typ dat do jednoho volání a výsledek rozdělit mezi čekající resolvery. Bez toho se výkon při větších datech zhroutí.
Pro teplé dřevo volte stěny v teplé, ale světlejší škále – krémová, písková, teplá šedá s hnědým podtónem nebo jemná olivová. Chladné dřevo snese chladnější odstíny: šedobílou, světle modrozelenou, uklidňující šeď. Nepoužívejte čistě bílou na velkou plochu vedle teplého dubu, vznikne tvrdý kontrast a nábytek bude působit žlutě. Místo toho vezměte bílou zlomenou do krému.
Barvy řešte v poměru, ne v počtu. Zvolte jednu dominantní barvu na stěny a velké plochy, jednu doplňkovou na textil a jednu akcentní na drobnosti. Akcentní barva nemá být na pěti místech — stačí polštář, váza a jedna kniha v polici. Častá chyba je snažit se „roztáhnout" výraznou barvu po celé místnosti, aby nepůsobila osaměle. Ve skutečnosti se tím rozředí a pokoj ztratí ohnisko. Naopak opakování stejného odstínu ve dvou různých materiálech — třeba tmavě modrá na látce a na keramice — místnost spojí, aniž by byla nudná.
Začněte hmotností spáče. Do zhruba sedmdesáti kilogramů stačí běžný rošt s dřevěnými lamelami a nosností kolem sta kilogramů na osobu. Nad osmdesát kilogramů hledejte hustší lamely, užší rozteč a masivnější rám. U dvoulůžka počítejte s tím, že každá polovina musí unést váhu svého spáče — dva lehcí lidé nepotřebují stejný rošt jako dva těžší. Pokud se váhy obou spáčů výrazně liší, zvažte dva samostatné rošty v jedné posteli, jinak se lehčí z nich bude na tvrdé straně „houpat" a těžší se propadne.