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.