• ú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!
    Hráli jste někdy nějakou webovku a napadlo Vás někdy udělat si nějako vlastní?
    Máte nějaký nápad na bezva hru a neumíte ho realizovat?
    Nebo umíte skvěle programovat webové aplikace, ale nemáte nápad na dobrou hru?
    Nebo namáte ani jedno a umíte cokoliv jiného, co by mohlo při tvorbě hry pomoct (malovat, dělat hezky vylížející html stránky, jakoukoli grafiku, nebo jste matematický génius, prostě COKOLI)
    Pokud Vám vyšla alespoň jedna kladná odpověď, jste tu správně!

    domenu radeji stylem

    17 hlasy od 17 respondentů

      rozbalit záhlaví
      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.
      CYBERWOLF
      CYBERWOLF --- ---
      TENCOKACISTROMY: nebo takhle, vis o nejakem db serveru, ktery tohle skutecne dela?
      CYBERWOLF
      CYBERWOLF --- ---
      TENCOKACISTROMY: nj, ale predstav si, ze mas cachovanych par stovek (tisic, desetitisic...) dotazu a pri kazdem insertu musis proverovat, jestli by se vlozeny zaznam do nektereho nevesel aby se cache zinvalidovala. To mi neprijde realne, rekl bych, ze overhead bude daleko vetsi, nez zisk, obzvlast pokud budou inserty/updaty casto.
      TENCOKACISTROMY
      TENCOKACISTROMY --- ---
      CYBERWOLF: Jak kdy. Kdyz bys mel napriklad "SELECT a,b,c FROM tbl WHERE d > 10", tak pri "INSERT INTO tbl (a,b,c,d) VALUES (1,2,3,4)" docela jasne vis, ze to invalidovat nepotrebujes.
      CYBERWOLF
      CYBERWOLF --- ---
      TENCOKACISTROMY: tohle konkretne MySQL, ale pochybuju, ze to jinde bude jinak. Logicky, kdyz zmenim obsah tabulky, tak se meni i to, co muzu vybrat a musi se invalidovat cache. Tezko by mohlo byt zjistovani, jestli do ktereho nacachovaneho dotazu by se vlozeny/upraveny zaznam vesel efektivnejsi, nez invalidace cache pro danou tabulku
      TENCOKACISTROMY
      TENCOKACISTROMY --- ---
      CYBERWOLF: A to se tyka kteryho db stroje?
      CYBERWOLF
      CYBERWOLF --- ---
      Jen tam mimochodem, trochu jsme ted resili cachovani SQL dotazu a tak nejak vyplynula takova (nakonec docela zrejma) vec a to ze query cache se invaliduje pokazde, kdyz se tabulka zmeni (struktura, nebo obsah). Me tak napadlo, ze to je v pripade webovych her docela pruser, protoze pripadu, kdy se nejaka data pouziji vic nez jednou do chvile, nez do tabulky nekdo zapise bude opravdu malo.

      Je tedy pravda, ze pokud bude dotaz dobre napsany, probehne rychle i bez cache, ale i tak mi to pripada jako oskliva neprijemnost :(
      WEWERKA
      WEWERKA --- ---
      CYBERWOLF: Nojo, klikaci :D Tak tam bych udelala rozdil mezi "posledni refresh" vs "posledni skutecna zmena"
      CYBERWOLF
      CYBERWOLF --- ---
      WEWERKA: To vypada jako docela dobry napad, ale pokud jde o pocitani neprihlasenych hracu, tak pocitej s tim, ze lidi hrajici z prace (obzvlast ti pracujici na nejakych mene frekventovanych mistech nebo statni sprave) budou prihlaseni porad a pokud nekdo vymysli nejaky helper, tak nebude ani ta minutova neaktivita:)
      WEWERKA
      WEWERKA --- ---
      Tak jsem na to asi prisla :) Vsechny subjekty patri nekam na mapu. Pokud se zmeni na nekom, kdo ma uz vypocitanou predikci, jednodusse vezmu vsechny subjekty se vztahem na dane policko v mape a uplne vsechny prepocitam. Teoreticky by se melo jednat o 50-200 radku, worst case scenario max 1000. A pokud to predelam na paralelni vypocet, tak by to mohlo byt dopocitane za chvili.
      K tomu optimalizace stylu a) pocitej neprihlasene hrace b) pocitej par minut po hracove neaktivite.
      Tahy budou radove 1-2h, v rychlem rezimu treba 30 minut. Takze cas na propocet urcite bude.
      TENCOKACISTROMY
      TENCOKACISTROMY --- ---
      CYBERWOLF: Ja mam zkusenosti hlavne s MSSQL, ale tenhle pristup mi pripada pomerne jednoduchej a efektivni, tak jsem si rikal, ze by to mohli implementovat i ostatni stroje. Ale hlavu na spalek, bych za to nedal :)
      WEWERKA
      WEWERKA --- ---
      Hm, diky za tipy. Dedeny tabulky v praci pouzivame a ani vlastne nevim proc :)
      CYBERWOLF
      CYBERWOLF --- ---
      TENCOKACISTROMY: mam za to, ze tohle dela jenom MSSQL :)
      TENCOKACISTROMY
      TENCOKACISTROMY --- ---
      CYBERWOLF, CYBERWOLF: Jj, s tim souhlasim.
      TENCOKACISTROMY
      TENCOKACISTROMY --- ---
      WEWERKA: Nemyslim radky, ale stranky. Napr. MSSQL (ale u ostatnich to bude imho stejne) si tu tabulku rozdeli na jednotlivy casti (= stranky) o velikosti X radku. Kdyz pak delas nejakej update zamykaj se jen ty stranky, kde se neco updatuje. Kdyz updatujes na zaklade sloupcu, ktery maj indexy tak se ti i rychle vyhodnotej stranky, ktery se maj zamknout. Navic si u transakci muzes (zase - neznam moc dobre postreges, ale urcite to bude umet) nastavit, aby se ti to lockovalo jenom pro zapis, ne pro cteni.

      Jestlize mas velky mnozstvi ruznejch typu objektu, spis nez nejakou univerzalni strukturu o par tabulkach pro ulozeni vseho bych pouzil "dedeny tabulky", ktery by byly jakoby tridy (class v OOP). Tim by jsi cekani na zamky docela dost omezila.
      CYBERWOLF
      CYBERWOLF --- ---
      CYBERWOLF: jinak receno, myslim si, ze pokud se nebude resit vse najednou, ale tak ze se bude - treba paralerne - pracovat pouze s vysledky nejake uz ukoncene faze a dalsi faze nezacne dokud neskonci ta stavajici, tak k deadlocku nemuze dojit.
      CYBERWOLF
      CYBERWOLF --- ---
      WEWERKA: k deadlocku by, si myslim, melo/nemelo dochazet nezavisle na vykonu stroje. Kdy muze nastat? Neco ceka na neco jineho, co ceka zatim ceka na to prvni neco, coz muze nastat jen v pripade, ze by se to vyhodnocovalo paralerne a to veci, ktere na sobe vzajemne zavisi. Kdyz se ale budou vyhodnocovat veci, ktere zavisi jen na necem, co uz bylo vyhodnoceno predtim a ne na tom, co se vyhodnocuje ted, tak by tenhle problem nemel nastat.
      Kliknutím sem můžete změnit nastavení reklam