Chybějící index, který zabíjí výkon dotazů

Z Mazovia


První věc je image versus kontejner. Image je jen zmrazený souborový systém a metadata, kontejner je jeho spuštěná instance. Když spustíte docker run, nevzniká kopie image, ale jen zapisovatelná vrstva navrch. Proto se změny v kontejneru ztratí při jeho smazání. Řada začátečníků řeší, proč jim po docker rm zmizela data z databáze. Odpověď je jednoduchá: byla uvnitř kontejneru, ne mimo něj. Data, která mají přežít, patří do svazku (volume) nebo na připojený adresář hostitele.

Kdy typy pomáhají a kdy jen překážejí TypeScript není jen o tom, abyste všude psali typy. Většinu typů odvodí sám z přiřazených hodnot. Pokud napíšete const pocet = 5, ví, že jde o číslo. Zbytečné je psát const pocet: number = 5. Naopak u parametrů funkcí a návratových hodnot se typy vyplatí, protože odhalí chyby dřív, než kód spustíte. Pozor na typ any – vypíná kontrolu a často se objevuje tam, kde si vývojář neví rady. Každé any by mělo být dočasné a mělo by mít vysvětlení.
Image je neměnná šablona, kontejner je její běžící instance. Když spustíte příkaz docker run, Docker vytvoří kontejner z image. Pokud do kontejneru zapisujete data, po jeho smazání zmizí. To je častý šok: uživatel si uloží databázi do kontejneru, restartuje ho a data jsou v tahu. Řešením je takzvaný volume – připojení adresáře z hostitelského počítače do kontejneru. Data pak přežijí i smazání kontejneru. Stejně tak porty: aplikace uvnitř kontejneru poslouchá na nějakém portu, ale zvenčí se k ní nedostanete, dokud port nezveřejníte přes -p. Bez toho si budete marně klepat na localhost.

Častá past je zaměňování typů a rozhraní. Rozhraní se používá pro popis objektů a může se rozšiřovat. Typy se hodí pro složitější kombinace, například sjednocení nebo průniky. V praxi to znamená, že pro běžné objekty použijete interface a pro výčty nebo složitější pravidla type. Nemusíte to řešit dogmaticky, ale měli byste být konzistentní v rámci jednoho projektu.

Začněte tím, že rozdělíte odpovědnost dřív, než spustíte první sprint. Produktový vlastník rozhoduje o tom, co má největší hodnotu, a musí být k zastižení během sprintu. Scrum master odstraňuje překážky a hlídá, že se rámec neohýbá. Vývojáři odhadují a sami si řídí, jak práci udělají. Pokud tyhle tři role splývají v jednu osobu, dostanete chaos s agilní terminologií. V malých českých firmách je běžné, že produktový vlastník je zároveň vedoucí a zároveň řeší zákazníky. To se dá vydržet jeden sprint, ne pět.
Základem je soubor tsconfig.json. V něm se nastavuje cíl překladu, přísnost kontroly a to, které soubory se mají zpracovat. Typická chyba je zapnout strict: true hned na začátku u velkého projektu. Lepší je začít s strict: false, postupně přidávat jednotlivé kontroly a opravovat chyby po menších dávkách. Jinak vznikne stovky chyb najednou a vývoj se zastaví.

K tomu slouží příkaz EXPLAIN. Spusťte jej před dotazem a sledujte sloupec s typem přístupu. Hodnota ALL nebo full scan znamená problém. Zajímejte se také o počet prohledávaných řádků — pokud je výrazně vyšší než počet vrácených, index chybí nebo se nepoužívá. Pozor na implicitní přetypování: když porovnáváte textový sloupec s číslem, databáze může index ignorovat. Vždy porovnávejte stejné typy.

Dalším častým problémem je funkce obalená kolem sloupce v podmínce. Zápis jako WHERE YEAR(datum) = 2024 zabrání použití indexu na sloupec datum. Řešením je přepsat podmínku na rozsah: datum > ndz.zp.Ua = '2024-01-01' AND Rady Pro Rekonstrukci datum
Sítě jsou třetí oblast, kde to lidé často vzdají. Kontejnery na stejné uživatelské síti se vidí podle jména, ne podle IP adresy. To znamená, že aplikace se nepřipojuje na localhost, ale na jméno služby. Pokud si v kontejneru nastavíte připojení na localhost, sáhnete si po svém vlastním kontejneru, ne po databázi vedle. Porty publikované přes -p slouží jen pro přístup z hostitele, nikoli pro komunikaci mezi kontejnery. Zaměnit tyto dvě roviny je pravděpodobně nejčastější zdroj zmatku.

Pozor také na dotazy, které vrací zbytečně mnoho sloupců nebo řádků.SELECT * sice ušetří psaní, ale přenáší data, která aplikace nepoužije. Na velkých tabulkách to zbytečně zatěžuje paměť i síť. Pokud potřebujete jen existenci záznamu, použijte LIMIT 1. U spojování tabulek dávejte přednost JOIN před poddotazy v klauzuli IN, zejména když vnitřní dotaz vrací mnoho řádků.

Další problém nastává u knihoven, které nemají vlastní typy. Řešením je balíček s typy, pokud existuje. Pokud ne, musíte si typy napsat sami. Nejhorší varianta je použít declare module s any, protože tím ztratíte veškerou kontrolu. Lepší je popsat jen to, co skutečně používáte. U velkých knihoven se to vyplatí, protože odhalíte chyby v volání funkcí.

If you treasured this article and also you would like to acquire more info about více na webu generously visit our web page.