Topic: Pasikartojantys veiksmai, irasymai.

Sveiki. Kalba eina apie online zaidima. Turiu ant cronjobs pasileides faila kuriame apdorojami zaidimo puolimai. Vartotojai pradejo skustis, kad kazkas neva 'bugina'. Issiaiskinau, kad kazkokiu budu,kartais zaidejams po puolimu gryzta dvigubai daugiau kariu negu siunte i puolima. Tipo pasikartoja veiksmas. Bet kaip jis gali pasikartoti,jeigu jis ant cronjobs kraunamas kas minute? Ir dar prie to pacio noriu paklausti,ar imanoma sukant cikla padaryti, kad pvz: sukosi viena karta igavo kintamieji kazkokias reiskmes,bet reikia,kad kintamieji visada butu tokie,kokie sukantis pirma karta. P.S. kintamuju labai daug.

Re: Pasikartojantys veiksmai, irasymai.

Problema greiciausiai tame, kad tavo scriptas kartais nebespeja prasisukti per 1 min. ir taip nebaigus dar jo vykditi pasileidzia dar karta (is esmes vienu metu pradeda jau veikti 2 threadai su tuo paciu scriptu). Kadangi tu tokios situacijos nenumatei tai ir nera atitinkamai padaryti sprendimai. Taigi taip pasileidus scriptams, yra paimami tie patis duomenis. Taip is esmes gaunasi, kad ta pati kova ivyksta 2 kartus. Todel tau ir gryzta dvigubai kariu. Kai paimama infa kovai, reiktu ta infa panaikinti arba lockinti, tam kad pasileides kitas scriptas jos nebegaletu paimti.

Re: Pasikartojantys veiksmai, irasymai.

Neodan wrote:

Problema greiciausiai tame, kad tavo scriptas kartais nebespeja prasisukti per 1 min. ir taip nebaigus dar jo vykditi pasileidzia dar karta (is esmes vienu metu pradeda jau veikti 2 threadai su tuo paciu scriptu). Kadangi tu tokios situacijos nenumatei tai ir nera atitinkamai padaryti sprendimai. Taigi taip pasileidus scriptams, yra paimami tie patis duomenis. Taip is esmes gaunasi, kad ta pati kova ivyksta 2 kartus. Todel tau ir gryzta dvigubai kariu. Kai paimama infa kovai, reiktu ta infa panaikinti arba lockinti, tam kad pasileides kitas scriptas jos nebegaletu paimti.

O kaip lockinti reiketu? Nelabai suprantu.

4 (edited by Neodan 2012-04-10 09:32:20)

Re: Pasikartojantys veiksmai, irasymai.

Na jei naudoji innodb, tai tinka row'su lock'inimas (http://dev.mysql.com/doc/refman/5.0/en/ … modes.html).
Jei myisam, tada variantas yra tureti papildoma stulpeli kur atzimi ar su tuo irasu kas nors daroma ar ne.

Cia tik keliatas is galimu variantu, pagal aplinkybes dauk visa ko galima primastyti (-;

Re: Pasikartojantys veiksmai, irasymai.

Aisku,dekui.

Re: Pasikartojantys veiksmai, irasymai.

Jau pati įdėja naudoti chronJob'a kas 1 min yra nevykusi ypač tokiam svarbiam informacijos atnaujinimui. Reiktų duomenų bazę naujinti ne kas minutę, o tada kai reikia, kai vyksta veiksmas. Puolimo momentas:
užlokinami tablai > perskaičiuojama informacija > atnaujinama informacija duomenų bazėje > atlokinami tablai. Tas pats flowas kai miestas "šnipinėjamas", papildoma armija ir pan. Jei techniškai vienu metu į tuos pačius duomenų bazėje duomenis galima kreiptis keletą kartų - būtina Lockintį tablus.

Dėl kintamųjų tai nelabai supratau ką norėjai pasakyti. Jei klausei ar įmanoma pasinaudojus IF'u pirmam ciklo rate priskirti reikšmes atskiriems kintamiesiems ir daugiau jų nekeisti (vėlgi to pačio IF'o pagalba) - taip, tai įmanoma.

No warning? No action? I hate this situation!

Re: Pasikartojantys veiksmai, irasymai.

Tai tarkim jeigu nuskaitau puolimus,tiesiog padaryti mysql_query("SELECT * FROM puolimai  LOCK IN SHARE MODE"); taip? Kai panaudoju ta lock, kas nutinka? Nes bandziau katik,tai viskas taip pat veikia lyg ir, tik kaip suprantu neleis apdoroti to pacio puolimo 2 kart taip?

Re: Pasikartojantys veiksmai, irasymai.

to Exploder: nebuk tinginys ir pasiskaitinek normaliai apie innodb transakcijas ir lockinimus, juk galva ant peciu turi.
to xeranas: o tu bent isivaizduoji ka reikstu table lock sistemai, kuria sakykim vienu metu naudojasi bent pora simtu useriu?

Re: Pasikartojantys veiksmai, irasymai.

Neodan wrote:

to Exploder: nebuk tinginys ir pasiskaitinek normaliai apie innodb transakcijas ir lockinimus, juk galva ant peciu turi.
to xeranas: o tu bent isivaizduoji ka reikstu table lock sistemai, kuria sakykim vienu metu naudojasi bent pora simtu useriu?

Nemoku as angliskai... Parasiau krc uzklausa puolimu:
mysql_query("SELECT * FROM puolimai  LOCK IN SHARE MODE");

tikiuosi nesikartos daugiau jie...

Re: Pasikartojantys veiksmai, irasymai.

Neodan wrote:

to xeranas: o tu bent isivaizduoji ka reikstu table lock sistemai, kuria sakykim vienu metu naudojasi bent pora simtu useriu?

Reikštų pirkti kažką geresnio nei 1lt hostingą. :)
O šiaip aš kalbėjau bendrai. Defaultu storage engine eina MyISAM, o ten kaip žinia lockinimas eina table leveliu.

No warning? No action? I hate this situation!

Re: Pasikartojantys veiksmai, irasymai.

Default'as keiciasi :)

Re: Pasikartojantys veiksmai, irasymai.

to xeranas: o tu supranti, kad uzlockines table, klientus pradedi statyti i eile? Taip gausi laguojancia sistema arba resursus bereikalo svaistancia sistema.

13

Re: Pasikartojantys veiksmai, irasymai.

transakcijas reikia vykdyti, o ne hakinti savo lentas brutaliais metodais :)
vien jau "SELECT * FROM puolimai " kažkas nerealaus

Kiek maigyklių sudėvėjai ?

14 (edited by xeranas 2012-04-10 17:31:24)

Re: Pasikartojantys veiksmai, irasymai.

Neodan wrote:

to xeranas: o tu supranti, kad uzlockines table, klientus pradedi statyti i eile? Taip gausi laguojancia sistema arba resursus bereikalo svaistancia sistema.

Aš puikiai suprantu kaip veikia tablų rakinimas. Bet taip pat jei nepastebėjai tai čia naujokams dažniausiai neįdomus atsakymai, kuriuos reiktų patiems pasinagrinėti, paskaityti. Dėl to ir pateikiau lengviausia ir greičiausia sprendimą myisam engine lentelei. :)
Juolab, kad mėgėjiški web žaidimai vargiai susidurs su pakankamai dideliu srautu, kuris pradėtų kelti lag'ą dėl lentelių rakinimo.

md5 teisus, bet vėlgi ar naujokas norės galvą sukti dėl tranzakcijų ir kaip jas naudoti.. viskas ateina su laiku.

No warning? No action? I hate this situation!

Re: Pasikartojantys veiksmai, irasymai.

md5 wrote:

transakcijas reikia vykdyti, o ne hakinti savo lentas brutaliais metodais :)
vien jau "SELECT * FROM puolimai " kažkas nerealaus

Tai paaiskink placiau kas tos transakcijos. ;)

16 (edited by md5 2012-04-10 20:39:04)

Re: Pasikartojantys veiksmai, irasymai.

vienu identišku(teoriškai) metu iš dviejų bankomatų išiminėji visą pingių sumą iš tos pačios sąskaitos... bankas vienam bankomatui parodys špygą. Kitaip tariant, kažkuris bankomatas palauks, kol įvykdys pirmojo pinigų išėmimą, tada vykdys kito bankomato užduotį. štai ir transakcija.


http://www.databasejournal.com/features … -MySQL.htm

Kiek maigyklių sudėvėjai ?

Re: Pasikartojantys veiksmai, irasymai.

md5 wrote:

vienu identišku(teoriškai) metu iš dviejų bankomatų išiminėji visą pingių sumą iš tos pačios sąskaitos... bankas vienam bankomatui parodys špygą. Kitaip tariant, kažkuris bankomatas palauks, kol įvykdys pirmojo pinigų išėmimą, tada vykdys kito bankomato užduotį. štai ir transakcija.


http://www.databasejournal.com/features … -MySQL.htm

O kaip as viena kortele i du bankomatus ikisiu tavo manymu? :D

18 (edited by Neodan 2012-04-12 08:16:24)

Re: Pasikartojantys veiksmai, irasymai.

Exploder wrote:

O kaip as viena kortele i du bankomatus ikisiu tavo manymu? :D

Gali buti kelios korteles susietos su ta pacia saskaita. (-;