Szerző Téma: Bank rendszer - kamat (MySQL)  (Megtekintve 1117 alkalommal)

Bank rendszer - kamat (MySQL)
« Dátum: 2015. július 27. - 20:11:35 »
0 Show voters
sziasztok
röviden annyi, van egy kis időm, ígyhát elkezdtem átírni a bank rendszerem MySQL-ra...
már minden meg van, elég hosszú, én szerintem minden rendben van vele.
nem is itt a gond, hanem ott, hogy a kamat részt is át kellett írni (dini-vel tökéletesen ment)
(most mindenki azt gondolja: hát MySQL-al hogy nem tudod megcsinálni???)
tegyük fel van 50 bank létrehozva... van 2000 regisztrált játékos, akiknek van bankfiókja
a rendszer olyan alapon működik, hogy minden játékosnak minden banknak külön számlája lehet, más-más adatokkal(pénz,összes kamt, jelszó, stb.)
most ha csak max 500 játékosnak elég ha van 6-7 bankszámlája, akkor az így is 3000-3500 bankszámla
csináltam egy kódot, amelynek frissítenie kell az összes számlát, amikor el jött az idő (minden egyes bankszámla adatait lekéri, a bank kamatláb értékét (minden banknak más is lehet), majd kiszámolja, és újra elmenti)
3000 soros tesztnél mindössze ~600 ms alatt lefut a pawn kód, de a mysql nem tudja lementeni az egészet, és vmikor nem is csinál semmit
a kód:
 

new rows,bankid,money,allint,Float:interest,giveint,Float:allmoney,name[24],Cache:cache;
       cache=mysql_query(mysql,\"SELECT * FROM BankAccounts\");
    rows=cache_num_rows();
        new time = GetTickCount();
    if(rows)
    for(new i;i<rows;i++)
    {
       bankid=cache_get_field_content_int(i,\"BankID\");
       cache_get_field_content(i,\"Name\",name);
   money=cache_get_field_content_int(i,\"Money\");
   allint=cache_get_field_content_int(i,\"AllInterest\");
   interest=1+(GetBankInterest(bankid)/100);
   allmoney=floatmul(float(money),interest);
   giveint=floatround(allmoney)-money;
   printf(\"ID: %d\",i);
   printf(\"money: %d\",money);
   printf(\"allmoney: %f\",allmoney);
   printf(\"interest: %f\",interest);
   printf(\"int: %d\",giveint);
   printf(\"-----------------------\");
   mysql_format(mysql,query,sizeof(query),\"UPDATE BankAccounts SET Money=\'%i\',Interest=\'%i\',AllInterest=\'%i\' WHERE BankID=\'%i\' AND Name=\'%e\'\",floatround(allmoney),giveint,allint+giveint,bankid,name);
   mysql_tquery(mysql,query,\"\",\"\");
   SetGVarInt(\"BankMoney\",(GetGVarInt(\"BankMoney\",bankid)+giveint),bankid);
}
   printf(\"%d(ms)\", GetTickCount() - time);
cache_delete(cache);

 
A kódot lehet még optimalizálni, de majd csak akkor, ha fog működni
nem tud vki erre megoldást?
előre is kösz.
U.I: bocs a hosszú szöveg miatt.
« Utoljára szerkesztve: 2015. július 27. - 23:08:29 írta ScreaM »

Bank rendszer - kamat (MySQL)
« Válasz #1 Dátum: 2015. július 27. - 22:39:18 »
0 Show voters
Szerintem ez a leírás segíteni fog.
Ebben szépen le van írva, hogy kell használni a threaded query-t. (Bár amikor én tanultam én a vikiről néztem mert nem is tudtam, hogy itt van hozzá leírás :D)

Bank rendszer - kamat (MySQL)
« Válasz #2 Dátum: 2015. július 28. - 18:48:45 »
0 Show voters
tudom használni a tquery-t
amit láthatod, egy sima query van, az is csak lekérdezés
az elmentés (frissítés) tquery
most használhatok a sima query helyett tquery-t, de az felesleges, még ha inline-t használok akkor is
az elmentéssel van baj...

Bank rendszer - kamat (MySQL)
« Válasz #3 Dátum: 2015. július 28. - 22:56:23 »
0 Show voters
Pont fordítva kéne, betöltésnél tquery, mentésnél pedig sima.

Bank rendszer - kamat (MySQL)
« Válasz #4 Dátum: 2015. július 29. - 12:33:01 »
0 Show voters
elmagyarázod miért?
tudomásom szerint a tquery fut agymástól függetlenül.

Bank rendszer - kamat (MySQL)
« Válasz #5 Dátum: 2015. július 29. - 13:08:02 »
0 Show voters
Én mindig is úgy csináltam, és jól működött. Ha nem akarod úgy megpróbálni ez van.

Bank rendszer - kamat (MySQL)
« Válasz #6 Dátum: 2015. július 31. - 18:28:30 »
0 Show voters
Megoldva  :angry: :thumbsup:
Zárok!

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal