Jump to content

[TUTORIAL] Query-uri SQL si optimizare.


Matt
 Share

Recommended Posts

Helau.

 

Bun, cu totii stim ce este optimizarea si in ce consta. Totusi,  codul facut ca si 'drumul ce mai scurt' nu este toata optimizarea. Query-urile SQL au nevoie de un timp pana sa fie terminate si daca nu le distribuiti bine in cod o sa aveti Tick Drops. Acele Tick Drops apar cand server-ul asteapta ca acel query executat de voi sa fie completat. Astazi vreau sa va explic cateva trucuri prin care nu o sa aveti probleme.

 

Pentru inceput, avem exemplul:

mysql_format(SQL, query, "UPDATE `users` SET `Money`=%d WHERE `ID`=%d", PlayerInfo[playerid][pMoney], PlayerInfo[playerid][pSQLID]);
mysql_query(SQL, query);

Sa zicem ca vrem sa punem acest query intr-un timer de 1 secunda. Dupa fiecare secunda server-ul va astepta ca acest query sa fie executat, dar pe noi nu ne intereseaza asta, asa ca server-ul va astepta practic degeaba in fiecare secunda ca acest query sa fie terminat . De asta trebuie sa facem acest query threaded.

mysql_format(SQL, query, "UPDATE `users` SET `Money`=%d WHERE `ID`=%d", PlayerInfo[playerid][pMoney], PlayerInfo[playerid][pSQLID]);
mysql_tquery(SQL, query, "", "");

Bun, care e diferenta dintre un query threaded si unul normal: Pai, query-ul normal pune in asteptare script-ul server-ului, in timp ce query-ul threaded se executa separat. Practic, nu deranjeaza server-ul sa zic asa. Printr-un desen sper sa intelegeti mai bine:

https://imgur.com/gSr89YQ

La stanga avem query-uri non-threaded iar la dreapta avem query threaded.

Query-urile non-threaded sunt necesare doar cand ai un query de la care astepti un raspuns, cum ar fi:

mysql_format(SQL, query, "SELECT * FROM `users` WHERE `Admin` != 0");
mysql_query(SQL, query); // deoarece avem nevoie de randurile rezultate pentru a fi prelucrate
for(new i, j = cache_get_row_count(); i != j; i++)
	{
		new name[MAX_PLAYER_NAME];
		cache_get_field_content(i, "Name", name);
		SendClientMessage(playerid, -1, name);
	}

Sau putem sa facem o metoda mai optimizata folosind query threaded:

mysql_format(SQL, query, "SELECT * FROM `users` WHERE `Admin` != 0");
mysql_tquery(SQL, query, "ShowAdmins", "d", playerid); // sa zicem ca am bagat acest query intr-o comanda, playerid = jucatorul care a folosit comanda
.
.
.



forward ShowAdmins(playerid);
public ShowAdmins(playerid)
{
	for(new i, j = cache_get_row_count(); i != j; i++)
	{
		new name[MAX_PLAYER_NAME];
		cache_get_field_content(i, "Name", name);
		SendClientMessage(playerid, -1, name);
	}
	return 1;
}

Astfel, server-ul nu va fi deranjat iar adminii nostri se vor afisa dupa aprox. cateva milisecunde mai tarziu. (aproape ca nici nu se observa diferenta)

 

Daca am gresit cu ceva astept sa ma corectati si sper ca v-a prins bine acest mic tutorial.

Respecta si vei fi respectat.

 

BigInt Pawn:

Pacman C++: 

Snake C++:

Minesweeper C++:

 

mattbb.cash

leaks.ro

Link to comment
Share on other sites

Chiar acum, Dennis12 a spus:

Good tutorial, but it's not enough .. :)) 

 

Dupa cum am zis, bun tutorial pentru incepatori, dar nu e destul pentru cei ce vor sa optimizeze toate cacaturile astea de gamemodeuri de pe internet .. :)) 

 

Mna, eu le-am dat un truc de optimizare doar nu o sa le zic tot acum ????

Respecta si vei fi respectat.

 

BigInt Pawn:

Pacman C++: 

Snake C++:

Minesweeper C++:

 

mattbb.cash

leaks.ro

Link to comment
Share on other sites

Eu cu Matt suntem prieteni si mi-a spus sa ma uit peste tutorialul lui si am facut o mica gluma.

Edited by s0nyx

                                                                                                                              

Link to comment
Share on other sites

47 minutes ago, Dennis12 said:

????

Cum ar putea cineva sa faca chestia asta mai bine daca toti o folosesc la fel ... :)))))) 

Mai e o metoda sa folosesti ceva mai optim, dar nu are rost sa vorbesc despre ea ca multi nu or sa o inteleaga.

 

merita spusa

 

ON: good job

Edited by LolyAdv
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...