Snížit počet query do databáze
- matronator
- Člen | 38
Dělám jednoduchou browser-based game (PBBG) a zajímá mě, jak by se řešila optimalizace počtu volání do databáze. Mám v databázi tabulku např. „products“, která obsahuje seznam produktů u kterých se mění pouze cena a to vždy jednou za 12 hodin (teď je to 10 minut kvůli testování.) Aby se pokaždé když někdo zobrazí stránku s produkty nevolalo do databáze, když na 90% budou data stejná jako předtím, tak mě napadlo ukládat někam ty hodnoty (cache?) a novou query zavolat až po expiraci uložených dat.
- Jak bych v Nette uložil výsledek té query do paměti a všechny následné požadavky by se místo databáze brali odtamtud?
- Jak bych synchronizoval update ceny v databázi s expirací uložené hodnoty?
- Je to vůbec potřeba, nebo by to databáze zvládla i bez toho (o databázích toho moc nevim, ale vždycky sem měl za to, že by se tam nemělo volat kvůli každý blbosti)?
Editoval matronator (16. 3. 2020 18:10)
- Šaman
- Člen | 2667
Obecně, dokud reálně nenarazíš na problém v odezvě od databáze, tak
nemá moc cenu řešit optimalizaci.
Konkrétně relační databáze jsou dnes naopak natolik optimalizované, že
zvládají bez problémů vše co lze označit za běžnou práci a nějaký
vlastní workaround by mohl být pomalejší než nový dotaz. (Tedy dokud
stránka nepokládá stovky dotazů, nebo dokud neřešíš desítky requestů
za sekundu, tak to neřeš.)
Editoval Šaman (16. 3. 2020 18:43)
- matronator
- Člen | 38
Ok, díky za odpověď. Já jsem si právě nebyl jistej, když sem si představil když by všechny ty požadavky dělalo najednou třeba i jenom 50 lidí, jestli by to nějak neblokovalo/nezpomalovalo procesy (nebo něco) v databázi. Pamatuju si když sem asi před 3 rokama měl Bitcoin faucet, tak ten framework se kterym sem to dělal měl nějak špatně udělaný query a v phpMyAdminu to furt hlásilo překročenej limit počtu požadavků a stránka byla hrozně pomalá.
Ale jinak máš asi pravdu, teď sou důležitější věci na kterejch bych měl dělat dřív, než řešení optimalizace databáze, když to zatim stejně běží jenom u mě na localu :D