Autor | Zpráva | ||
---|---|---|---|
G3n3sis19 Profil |
#1 · Zasláno: 12. 3. 2011, 04:20:41
Chtěl bych vědět, kolik by měl být počet dotazů na optimalizované browser hře při pohledu na vesnici, (SQL) s výpočtem surovin, kontroly nových SZ, hlášení, jednotek (i nově vytrénovaných), zápisem do access logu který je v DB? Vytvářím vlastní online hru (nejsem začátečník, sice umím php čtvrt roku ale amatér nejsem), ale obávám se že to prostě normální virtuál nebude zvládat. Kolik si myslíte (vím, že se to nedá srovnávat ale chtěl bych vědět vaše názory), že má dotazů známá online hra začínající na Tra... ? (nevím, proč je tam cenzura)
Až se dozvím nějaké odpovědi, řeknu Vám kolik mám já dotazů, aby jste nemysleli na žádný extra čísla. Tak díky za odpovědi |
||
pcmanik Profil |
#2 · Zasláno: 12. 3. 2011, 06:09:40
Zhodou nahod robim tiez jednu hru, aj ked trocha komplexnejsiu. Tych dotazov nieje treba vela, mne osobne staci dobre spraveny ktory berie suroviny a stav pri kazdom nacitani stranky resp. sa vyuziva cache. A potom vacsinou len jeden na kazdej includovanej stranke.
|
||
G3n3sis19 Profil |
#3 · Zasláno: 12. 3. 2011, 08:35:40
mohl by si mi to ukázat (dát skype)?
|
||
dan55 Profil |
#4 · Zasláno: 12. 3. 2011, 08:40:53
Také na jedné pracuji,
přesný počet SQL nevím, ale je jich hodně, běží to na VPS a neočekávám tisíce lidí. Suroviny aktulizuji ajaxem každých 8 sekund, útoky taktéž ajaxem každých 30 sekund. SZ po každém refreshu. Mapa - 1 zdvojený dotaz (políčko a natáhnutí dat o uživateli). Po přihlášení se do $_SESSION načtou veškeré informace o uživateli, abych to nemusel všechno tahat. |
||
G3n3sis19 Profil |
#5 · Zasláno: 12. 3. 2011, 08:42:25
odkaz by nebyl? Nebo si mě přidejte na skype, oba "martin.foltyn"
|
||
1Pupik1989 Profil |
#6 · Zasláno: 12. 3. 2011, 13:56:11
Já mám jeden na kompletní informace o vesnici (suroviny, název, vojsko, majitel), v hlavní budově jeden na stavbu a jeden na mapě. Běží to jak má a načítá se vše pouze jednou při na čtení stránky :)
|
||
G3n3sis19 Profil |
#7 · Zasláno: 12. 3. 2011, 15:00:07 · Upravil/a: G3n3sis19
Tak to nechápu, jak je to možné
EDIT: smazáno číslo ICQ, znám jak si mě radi přidávají rusáci |
||
Darker Profil |
#8 · Zasláno: 12. 3. 2011, 15:59:40
Na diskusi obecně platí, že co se tu řešit začne, mělo by se tu i dořešit. Proto diskuse nemá PM.
|
||
G3n3sis19 Profil |
#9 · Zasláno: 12. 3. 2011, 18:17:23
To bylo jen z důvodu odkazů. JAk je tedy možný strčit tolik kontrol do 1-2 dotazů?
Na select uživatele jako takového (email, username,id, gamecoiny,atd...) mám v jedné tabulce, tam to selectnu jednou a dálo to mám v SESSION Další je vesnice. tam mám vojáky, suroviny, jméno vesnice, id vesnice. To jsou 2 dotazy. A jak se kontroluje příchozí PM? To už není možný do 2 dotazů dostrkat pokud (nemám to rád) není v dotazu dalších několik joinů |
||
1Pupik1989 Profil |
#10 · Zasláno: 12. 3. 2011, 19:18:04
Dotazů tam je samozřejmě víc (inbox, oznámení, zjištění nových příspěvků na fóru, jednotky atd.) Já vybírám třeba tři tabulky najednou podle ID hráče v Session a vypíšu. Seznam vesnic se načítá jen na jedné stránce, takže to ten jeden příkaz navíc přežije. Zkrátka se to napíše a pak jen ladí a ladí a ladí. Nikdy se to však pořádně nevyladí a to je ta krása. S každým laděním většinou přijde další bota :D
|
||
G3n3sis19 Profil |
#11 · Zasláno: 12. 3. 2011, 19:27:35 · Upravil/a: G3n3sis19
A mohl by si mi říct tedy počet těch dotazů když počítáš všechno to okolo ?
popř. vypsat je? Já mám toto 13Array ( [0] => SELECT id,username,capital_id,GC,access FROM users WHERE cookie_id = '' [1] => SELECT vid, wood, iron, clay, crop, u1,u2,u3,u4,u5,u6,u7,u8,u9,u10,u11,u12,u13,f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12 FROM villagedata WHERE owner_id = '1' AND capital = '1' LIMIT 1 [2] => SELECT id, bid,timestamp,completetime FROM buildingdata WHERE vid = '4802' [3] => SELECT id,uid,amount,lastupdate,completetime FROM trainingdata WHERE vid = '4802' ORDER BY completetime asc [4] => SELECT id FROM attacks WHERE (endtime-1299954482<1 and proc = 0) and (vid = 4802 or `to` = 4802) LIMIT 1 [5] => SELECT count(id) FROM reportdata WHERE (uid_attacker = '1' or uid_defender = '1') and `read` = '0' [6] => SELECT count(id) FROM privatemessages WHERE `to` = '1,G3n3s!s' and `read` = '0' [7] => SELECT count(id) FROM log_access WHERE 1299954482 - time <30 AND uid = '1'; [8] => UPDATE users SET timestamp = 1299954482 WHERE id = '1' [9] => INSERT INTO log_access (`id`, `uid`, `request_uri`, `http_referer`, `ip`, `time`) VALUES ('', '1', '/rok/game.php', '/', 'MOJEIP', '1299954482'); [10] => SELECT `id`,`image`,`clicks`,`max_clicks`,`max_views`,`views` FROM adverts WHERE `active`=1 [11] => SELECT * FROM bans WHERE (ip = 'MOJEIP' or username = 'G3n3s!s') and expired='0' LIMIT 1 [12] => SELECT * FROM attacks WHERE (`to` = 4802 or vid = 4802) and proc=0 ) |
||
1Pupik1989 Profil |
#12 · Zasláno: 12. 3. 2011, 19:43:03
Tak to asi nikdy nespočítám. 10 jich je na 100%. Zkusim někdy spočítat, ale asi to bude honička, jelikož je to spoustu stran a na každé může být něco jiného. Jen ty globální mám ve speciální stránce. Pro spousty ještě sahám AJAXem atd.
|
||
G3n3sis19 Profil |
#13 · Zasláno: 12. 3. 2011, 19:47:01 · Upravil/a: G3n3sis19
ajaxem - například?
děláš to v OOP? mám funkci přímo pro query - function query($query) { global $security, $queries_count,$queries_list; $do_query = $security->clear_text($query); $result = mysql_query($do_query) or die("Chybicka se vloudila ..<br>v pĹ^ŮĂkazu: $do_query<br><br><b>".mysql_error()."</b>"); $queries_count++; $this->queries_list[] = $do_query; } return $result; } |
||
1Pupik1989 Profil |
#14 · Zasláno: 12. 3. 2011, 19:55:17
ajaxem třeba vybírám z databáze aktuální chat a odesílám i příspěvky do db
|
||
G3n3sis19 Profil |
#15 · Zasláno: 12. 3. 2011, 20:01:17
a mohl by si mi napsat url dema/stránky kde se na to můžu podívat? Zní to velice dobře s hodně funkcemi :)
Nevadí mi že to není hotové, třeba ti pak na revange dám svůj |
||
1Pupik1989 Profil |
#16 · Zasláno: 12. 3. 2011, 20:46:18
|
||
G3n3sis19 Profil |
#17 · Zasláno: 12. 3. 2011, 21:10:15
já myslel jako celkově funkce, chat, forum atd. Ani starší verze nikde není ke vzhlédnutí ?
|
||
1Pupik1989 Profil |
#18 · Zasláno: 12. 3. 2011, 21:19:54
http://orbius.707.cz/satanian/hra.php?zobraz=mapa
Není to ale final, jen první pokus. Navíc to je jen mapa přes ajax. Promiň, že to není v bb-kodu, píšu z mobilu. |
||
G3n3sis19 Profil |
#19 · Zasláno: 12. 3. 2011, 21:21:51
°vůbec nevadí. Je to dobrý :)
Tipuju že open source to není ;) Kolik máš na takovýhle pole mapy dotazů? 2 ? 1 ? |
||
1Pupik1989 Profil |
#20 · Zasláno: 12. 3. 2011, 21:26:30 · Upravil/a: 1Pupik1989
jeden a dvě podmínky na osu X a dvě na osu Y. Vypisuju ji samozřejmě z db od bodu X do X+rozmer_mapy. To samé s Y
open source to není :D |
||
G3n3sis19 Profil |
#21 · Zasláno: 12. 3. 2011, 21:34:35
mohl by si mi zkopírovat ten dotaz? Já to mám co řádek to dotaz :(
|
||
1Pupik1989 Profil |
#22 · Zasláno: 12. 3. 2011, 21:41:02
podle toho jak to máš uložené v sql. Já mám zvlášť x a y.
Důležitý je x>=$x and x<=$max_x A to samé s Y |
||
G3n3sis19 Profil |
#23 · Zasláno: 12. 3. 2011, 21:47:32
x,y,id,occupied,img, zjistim si střed a v cyklu
[12] => SELECT capital_y, capital_x FROM users WHERE id = 1 [13] => SELECT * FROM mapdata WHERE y = -8 and x = -1 or y = -8 and x = 0 or y = -8 and x = 1 or y = -8 and x = 2 or y = -8 and x = 3 or y = -8 and x = 4 or y = -8 and x = 5 or y = -8 and x = 6 or y = -8 and x = 7 or y = -8 and x = 8 or y = -8 and x = 9 order by x asc,y asc [14] => SELECT * FROM mapdata WHERE y = -7 and x = -1 or y = -7 and x = 0 or y = -7 and x = 1 or y = -7 and x = 2 or y = -7 and x = 3 or y = -7 and x = 4 or y = -7 and x = 5 or y = -7 and x = 6 or y = -7 and x = 7 or y = -7 and x = 8 or y = -7 and x = 9 order by x asc,y asc [15] => SELECT * FROM mapdata WHERE y = -6 and x = -1 or y = -6 and x = 0 or y = -6 and x = 1 or y = -6 and x = 2 or y = -6 and x = 3 or y = -6 and x = 4 or y = -6 and x = 5 or y = -6 and x = 6 or y = -6 and x = 7 or y = -6 and x = 8 or y = -6 and x = 9 order by x asc,y asc [16] => SELECT * FROM mapdata WHERE y = -5 and x = -1 or y = -5 and x = 0 or y = -5 and x = 1 or y = -5 and x = 2 or y = -5 and x = 3 or y = -5 and x = 4 or y = -5 and x = 5 or y = -5 and x = 6 or y = -5 and x = 7 or y = -5 and x = 8 or y = -5 and x = 9 order by x asc,y asc [17] => SELECT * FROM mapdata WHERE y = -4 and x = -1 or y = -4 and x = 0 or y = -4 and x = 1 or y = -4 and x = 2 or y = -4 and x = 3 or y = -4 and x = 4 or y = -4 and x = 5 or y = -4 and x = 6 or y = -4 and x = 7 or y = -4 and x = 8 or y = -4 and x = 9 order by x asc,y asc [18] => SELECT * FROM mapdata WHERE y = -3 and x = -1 or y = -3 and x = 0 or y = -3 and x = 1 or y = -3 and x = 2 or y = -3 and x = 3 or y = -3 and x = 4 or y = -3 and x = 5 or y = -3 and x = 6 or y = -3 and x = 7 or y = -3 and x = 8 or y = -3 and x = 9 order by x asc,y asc [19] => SELECT * FROM mapdata WHERE y = -2 and x = -1 or y = -2 and x = 0 or y = -2 and x = 1 or y = -2 and x = 2 or y = -2 and x = 3 or y = -2 and x = 4 or y = -2 and x = 5 or y = -2 and x = 6 or y = -2 and x = 7 or y = -2 and x = 8 or y = -2 and x = 9 order by x asc,y asc [20] => SELECT * FROM mapdata WHERE y = -1 and x = -1 or y = -1 and x = 0 or y = -1 and x = 1 or y = -1 and x = 2 or y = -1 and x = 3 or y = -1 and x = 4 or y = -1 and x = 5 or y = -1 and x = 6 or y = -1 and x = 7 or y = -1 and x = 8 or y = -1 and x = 9 order by x asc,y asc [21] => SELECT * FROM mapdata WHERE y = 0 and x = -1 or y = 0 and x = 0 or y = 0 and x = 1 or y = 0 and x = 2 or y = 0 and x = 3 or y = 0 and x = 4 or y = 0 and x = 5 or y = 0 and x = 6 or y = 0 and x = 7 or y = 0 and x = 8 or y = 0 and x = 9 order by x asc,y asc [22] => SELECT * FROM mapdata WHERE y = 1 and x = -1 or y = 1 and x = 0 or y = 1 and x = 1 or y = 1 and x = 2 or y = 1 and x = 3 or y = 1 and x = 4 or y = 1 and x = 5 or y = 1 and x = 6 or y = 1 and x = 7 or y = 1 and x = 8 or y = 1 and x = 9 order by x asc,y asc [23] => SELECT * FROM mapdata WHERE y = 2 and x = -1 or y = 2 and x = 0 or y = 2 and x = 1 or y = 2 and x = 2 or y = 2 and x = 3 or y = 2 and x = 4 or y = 2 and x = 5 or y = 2 and x = 6 or y = 2 and x = 7 or y = 2 and x = 8 or y = 2 and x = 9 order by x asc,y asc |
||
1Pupik1989 Profil |
#24 · Zasláno: 12. 3. 2011, 21:58:03
já zjišťuju střed akorát z inputů na souřadnice. Při posuvu to není potřeba.
Jinak si data z databáze zapiš do pole a pak při vnořených cyklech akorát zjistíš, jestli pole existuje. Takhle to dělám teda já. |
||
G3n3sis19 Profil |
#25 · Zasláno: 12. 3. 2011, 22:57:48
proč mám kontrolovat, jestli pole existuje ?
|
||
1Pupik1989 Profil |
#26 · Zasláno: 13. 3. 2011, 15:10:24
no podle mě je to třeba rychlejší, než dotaz do databáze. Asi to je můj zlozvyk.
|
||
G3n3sis19 Profil |
#27 · Zasláno: 13. 3. 2011, 17:06:51
Stále to asi nechápu. To si mám natáhnout celou mapu do arraye a po posouvání to brát z toho? NEbo jsem nepochopil podstatu toho, proč mám co kontrolovat a odkud-
|
||
1Pupik1989 Profil |
#28 · Zasláno: 13. 3. 2011, 19:39:04
Ne, já si vyberu pole, které jsou v rozmezí souřadnic mapy a uložím je do pole. Pak už jen kontroluji, zda-li záznam v poli se souřadnicemi existuje. Samozřejmě to můžeš udělat jak chceš, tohle je pouze má vize.
|
||
G3n3sis19 Profil |
#29 · Zasláno: 13. 3. 2011, 22:47:57
jo takhle! Takže vlastně šetříš dotazy. To znamená, že když se posuneš o jedno políčko, ty co už máš v poli nepotřebuješ znovu natahovat, že ?
Mohl by si mi ukázat jak to kontroluješ, nebo mi ukázat kod té mapy? Dík |
||
1Pupik1989 Profil |
#30 · Zasláno: 14. 3. 2011, 14:11:11
Ne, načítá se to celé znova, ale jedním kódem vytáhnu celou mapu. Kdybych vytáhl větší kus, tak prakticky pohyb bez načítání by šel. Mě to do pole načítá Typ vesnice, souřadnice vesnice, speciální bonus vesnice, majitele vesnice atd. Na mapě 15x15 je těch vesnic (včetně lesa) asi 30 a všechny se načtou jedním SQL dotazem.
|
||
Téma pokračuje na další straně.
|
0