• úvod
  • témata
  • události
  • tržiště
  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    CYBERWOLFOn-line WebBased hry kreativně - udělejte si vlastní webovku!
    CYBERWOLF
    CYBERWOLF --- ---
    TENCOKACISTROMY: Pokud mas prilis zravy SW, tak i kdyz pridas vykon HW, tak kazde zvyseni navstevnosti ti z toho zvyseneho vykonu ubere vic, nez kdyby slo o SW optimalizovany. Treba vrazis tech 20k do RAM a disku, takze problem nyni vyresis i s rezervou, ale za rok bude zpatky, protoze tam leze vic lidi a budes muset znovu volit mezi 20k za HW nebo 50k za optimalizaci. A za rok zas.

    Takze v dlouhodobem horizontu (kdyz budeme pocitat se slusnym rustem) se vyplati spis ta optimalizace (samozrejme zalezi pripad od pripadu, tezko se to da brat obecne)
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    CYBERWOLF: Co cini hw zdroje docasnymi oproti sw optimalizaci?
    CYBERWOLF
    CYBERWOLF --- ---
    Ja bych radsi investoval do optimalizace, protoze hardwarove zdroje jsou docasnym resenim.

    Na druhou stranu je potreba rict, ze optimalizovat se taky neda do nekonecna, ale tak zkusit by se to melo.
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    CYBERWOLF: Nekdy to tak ale skutecne je lepsi (zduraznuju to "nekdy"). Ja jsem na obou stranach barikady - jak vyvojar, kterej chce ten system vymazlit, tak clovek, kterej to plati. A kdyz vim, ze to je reseni pro XY a zatez budy YZ, tak proste kalkuluju s tim, jestli mam dat 50k vyvojarum za optimalizaci nebo 20k za vetsi RAMku nebo dalsi disk.
    CYBERWOLF
    CYBERWOLF --- ---
    TENCOKACISTROMY: veci jako ze je lepsi koupit vykonejsi hardware nez vyladit vykon program (query/cehokoliv) prede mnou vubec nerikej ;)

    Pro zajimavost, databaze, ve ktere se zrovna hrabu by se z daneho vyctu vesla tak akorat do tech 64GB (no, vesla by se do 32, ale uz prakticky nic vic) a uprime receno ta databaze jeste neni az tak velka...
    WEWERKA
    WEWERKA --- ---
    Jojo, do hry je potreba investovat. Kuprikladu ja ze sveho stareho testovaciho atoma udelala dual atom na otestovani vice threadu.
    Dokonce pamet se zvysila o 1gb :DDD Velka investice, snad se mi to za 10 let az do doprogramuji i vrati :DDD
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    CYBERWOLF: Tak ona ta RAMka neni zas tak draha (oproti cene vyvojare/db specialisty) a v dnesni dobe 64bitovejch serveru s tou velikou pameti neni zadnej zasadni problem. Mit 16/32/64 GB RAM sice neni uplne bezny, ale na druhou stranu to taky neni zadny zavratny mnozstvi.
    CYBERWOLF
    CYBERWOLF --- ---
    Tak nejak jsem na to natahovani do pameti vzpomel, kdyz jsem se ted hrabal v databazich a kdyz vidim celkovou velikost databazi v radech GB, tak mi to prijde jako celkem nerealne, aby se skutecne drzelo v pameti vsechno (ve vetsine pripadu aplikace skutecne pracuje s drtivou vetsinou databaze). Mohlo by to fungovat s DB co ma par stovek mega, ale u velkych DB si to nedokazu predstavit.
    WEWERKA
    WEWERKA --- ---
    TENCOKACISTROMY: Hmm :) tak tohle asi pgsql nema :) Teda aspon myslim..
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    CYBERWOLF: Natahovani tabulek do pameti by mel umet ten DB stroj sam od sebe. Mel by splnovat ACID, a pak se o vubec nemusis starat o to co se ti kam zapsalo ci nezapsalo, protoze vis ze to mas na disku i v pameti.

    WEWERKA: U tech tabulek je zajimava moznost to rozdelit jak vertikalne (jednotlive sloupce jsou na ruznych discich), tak horizontalne (na zaklade nejakeho indexu jsou radky na ruznych discich). Doufam, ze jsem to vertikalne/horizontalne neprehodil, neustale si to pletu :)
    WEWERKA
    WEWERKA --- ---
    No koukam, ze je tu diskuze asi hlavne o mssql. V pgsql jsou shared buffers, ktere pri spravne velikosti pomahaji vykonu a to tak ze dost. Ale pri vetsi velikosti skodi.
    Dalsi vec je rozdeleni dat do tablespace. Takovych X (x > 10) SAS disku taky udela svoje.
    Pak treba misto beznych disku muzete pouzit SSD.
    CYBERWOLF
    CYBERWOLF --- ---
    YAWGMOTH: Kdyz je dotaz osklivy, je nejlepsi ho prepsat aby byl hezky:)

    Ale kdyz uz jsme to tu nakousli, jak to myslite s tim natazenim DB do pameti? Jedine, co me napada, je vytvorit si tabulky jako Memory, pracovat s nimi a treba jednou denne to zazalohovat do nejake "normalni" databaze, jenze pokud spadne server, je databaze pryc a muzu jet nejvys od posledni zalohy (a rekl bych, ze to s daty v pameti jinak nepujde)
    YAWGMOTH
    YAWGMOTH --- ---
    CYBERWOLF: ad to srovnání, to přece záleží na tom jakým dotazem ty data bereš ... jednoduchý dotaz to moc urychlit nemůže, ale takový většinou necachuješ. A jakmile je to dotaz ošklivý tak ten výsledek bude někde úplně jinde. (samozřejmě je tu i možnost cachovat zpátky do DB :) ).

    A co se týče těch 2GB, to už hodně záleží na povaze aplikace a těch dat, ale opravdu v tom nevidim problém, webový server u takové hry pravděpodobně až tolik paměti žrát nebude a databázový bude zvlášť :)

    TENCOKACISTROMY: celá DB v paměti je pochopitelně základ, pokud to jde.
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    YAWGMOTH: Ona je pak otazka, jestli radeji tu pamet nenechat db stroji, ktery si tam pak muze dat celou db a vyhledavat pak v ni. To ti s vykonem taky dost pomuze.
    CYBERWOLF
    CYBERWOLF --- ---
    Nooo, 2GB do pameti, to uz bych se asi trochu bal. Pokud by toho frcelo tolik, ze by bylo potreba cachovat tolik dat, tak ta pamet bude asi spis potreba nekde jinde.

    Kazdopadne, tady jde o neco trochu jineho - query cache je tak nejak transparentni zalezitost. DB server si to resi sam a kdyz ma validni cache, tak sahne misto do tabulky do ni a vrati vysledek zdibec rychleji a kdyz nema, tak vrati vysledek a to same si nacpe do cache. Jenze pokud se do te cache nestaci podivat driv, nez ta cache vyexpiruje, tak to dela uplne zbytecne a kdyby to nedelal, tak by mohl jet o neco lip (a do dneska jsem to jeste nevyzkousel, hmmm).



    Kdyz uz mluvime o cachovani, tak pred nejakym casem jsme v praci zkouseli, jak by se dala cachovat aplikacni data (celkem velky balik), aby se odlehcil SQL serveru. Celkem prekvapive (alespon pro me) jsme dospeli ke zjisteni, ze akorat memcache dokaze ta data vratit rychleji a to jeste ne o moc. Moduly pro cachovani dokazali cache vratit v case srovnatelnem s MySQL (bez cache). Cachovani do souboru bylo dokonce znatelne pomalejsi.

    Ukazalo se, ze vyrazny podil na pomalosti cache ma rekonstrukce dat, protoze neni mozne ukladat rovnou pole, je potreba ho prevest do nejakeho ulozitelneho formatu (serializovat,csv,json, xml...) a prave rozparsovani po nacteni je nejkritictejsi bod.

    Zaver, ktery z toho experimentu plyne je, ze prakticky nema cenu cachovat data a jedine co se vyplati cachovat je hotovy vystup (ktery se tedy nemusi porad generovat a hlavne se da ulozit/nacist tak jak je).
    YAWGMOTH
    YAWGMOTH --- ---
    CYBERWOLF: tak to je ale v případě query cache to samé, někde to uložit musíš :) ... mít 2gb memcache neni dneska problém a zase tolik těch dat aby se tam to důležité nevešlo ta hra mít nebude :)
    CYBERWOLF
    CYBERWOLF --- ---
    YAWGMOTH: memcache je fajn, ale ta pamet taky neni nafukovaci :)
    YAWGMOTH
    YAWGMOTH --- ---
    CYBERWOLF: proto se reálně používá ještě cachování na úrovni aplikace, třeba s memcached, a do databáze vůbec nelezeš :)
    CYBERWOLF
    CYBERWOLF --- ---
    TENCOKACISTROMY: Tak to je jesny, ze zalezi na situaci, ale ja bych prave rekl, ze zrovna webove hry jsou ten typ aplikace, kde tech insertu a updatu v pomeru k selectum docela dost (a proto tu o tom mluvim:) ).

    Ale jak o tom tak prubezne premyslim, napadlo me, ze by mozna mohlo pomoct v pripadech kdy je nepriznivy pomer select/zmeny, tak jednoduse query cache vypnout a zbavit se tak overheadu s overovanim a ukladanim cache, ktera se stejne v 99.9% pripadu nevyuzije.
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    CYBERWOLF: Tak to je samozrejme o tom, v jakym scenari to pouzivas. Kdyz mas naopak velkej pocet selectu a malej pocet zmen, tak se ti to vyplati.

    Resit query cache jsem nikdy nemusel, pac mi skoro porad vychazej dotazy pokazdy trochu jiny a casto se mi menej data. Ale vim, ze treba MSSQL umi notifikovat, ze se zmenily data pro tebou zaslanej dotaz. Doporucuje se to ale pouzivat v omezeny mire, aby si prave tim porovnavanim jak rikas, nezabrdil celej stroj. Jak to maj reseny uvnitr netusim, ale tipuju ze je to delany podobne jako Change Data Capture.
    Kliknutím sem můžete změnit nastavení reklam