To se netýká jen práce s databází. Často jsou celé aplikace psané tak, že se na nich nedá výkon škálovat.
Programátoři se neradi zajímají o takové "detaily", že server je jen stroj, má jen určitou paměť, počet jader procesoru. Nezajímá je, že nelze nastavit např. PHP tak, aby byl povolený běh scriptu desítky sekund a zároveň, že se nezahltí FPM a nepřestane přijímat další požadavky (v lepším případě).
Programátoři by podle mě měli vědět, že existují limity technologií, jaká je náročnost algoritmu, jak se dá škálovat a jak optimalizovat (třeba v budoucnosti). Netýká se to jen SQL.
Pocit, ať to napíšu, jak to napíšu, bude to fungovat, a když ne, tak se zaplatí vyšší výkon serveru, prostě není platný. Co funguje dobře v malém a bez dat, nemusí vůbec jít škálovat do velkého. Pokud script běží 100 ms, za sekundu jich prostě neobsloužíte víc jak 10 x počet jader, a to ještě v úplně ideálním případě. Pokud chcete vyřešit i střední odezvu, tak mnohem méně.
Programátor nemusí umět spravovat server, nastavovat databázi, umět dokonale určit vhodné indexy. Ale měl by umět poznat, kde je potřeba se zeptat - správce serveru, SQL specialisty, a dalších. Problém tedy není v tom, že neumí vše, ale že ani neví o tom, že to někdo jiný umět může a dokáže poradit.
Toto nezachráníte žádnou magickou technologií, ale širším přehledem - celkově, vzděláním v oboru.
Práce s relačními databázemi má aspoň tu výhodu, že tam ten prostor pro optimalizaci obvykle nějaký zůstává a někdy i obrovský. U jiných vám nezbude, než škálovat horizontálně, což taky není žádný med, zbytek aplikace na to musí být připravený (což třeba běžná aplikace v PHP prostě není ani vzdáleně).
IMHO jsou dnesni IT zamestnanci cim dal blbejsi a linejsi.
Co se tyce relacnich databazi, rozhodne nejsem odbornik jako Pavel Stehule, prece mam s jejich vlastnostmi velice dobre zkusenosti.
Potrebne znalosti za rozumnou praci s RDBMS s pohledu vyvojare jsou tyto:
-umet definovat tabulku a select joinem, integritni omezeni
-chapat co je to index a jeho vliv na select a update
-chapat problem redundance x vykon ve forme 3 zakladnich NF
-chapat co je to transakce, jak se projevuje (forknuti dat), pochopit rozdil truncate/delete
-vedet co je to trigger a jak se pouziva
-vedet co je to explain plan
-chapat se existuje neco jako PL/SQL, kde si v primitivnim jazyce na urovni shellu vyrobim proceduralni kod
- a kdyz vyse uvedene nestacilo, zeptal jsem se lidi s vetsi hlavou, to nastalo snad jenom dvakrat.
Vyse uvedene mi staci ke stesti. Nic, co by normalni hlava s IQ nad 100 nepobrala za dve odpoledne skoleni.
V realu, kdyz jsem delal s Oraclem, sedel jsem u Toada a jak opice jsem klepal na ikonu sanitky (explain plan) a rypal do toho jak tak dlouho, az Toad prestal zvyraznovat cervene nested loopy. Pak par hintu, aby se jako vychozi tabulka pro join pouzivala ta vzdalena pres DBLink (byla o nekolik radu vetsi), vysledek funguje upokojive dodnes.
Staci povsechne povedomi a RDBMS se pouziva luxusne.
Zato dneska vidim magory, co tahaj megabajty resultsetu mezi DB a aplikacem, aby to pres ORM namapovali do beanu, pak nad tim provedli agregace, jehoz vysledkem je jeden KPI integer.
Pricemz to samy slo udelat s prstem v nose v PLSQL a z pohledu aplikace jeden primitivni "select genKPI() from dual;"
Jenze k tomu je potreba vubec vedet, ze PLSQL existuje.
A kdyz uz vim, ze PLSQL existuje, pak treba i zjistim, ze Oracle podporuje Java stored procedury. Kde udelam s velice rychlym lokalnim pristupem k datum i takove ficurky jako je test pruchodnosti grafem s vyhledanim optimalni cesty podle vah.
Hlupak se strasne nadre, to plati vzdy a ve vsech oborech.
Prave mi pristal mail s HW sizingem pro jeden system postaveny kolem Elasticu, 48 CPU cores a 100GB RAM.
Podle ceniku AWS $1000 mesicne list price.
A podle meho laickeho nahledu by ty pozadavky dala dvojice postgresu (live + historic data) s TimescaleDB extenzi. Pro kazdy 8GB RAM a 4 CPU cores.