Großer Lag bei Accountspeicherung

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Guten Tag,


    ich habe folgendes Problem:


    wir haben so täglich +140 User online, wir speichern die Accountdaten per MySql.


    Ich benutze einen Timer der jede 30 min alle Accountdaten speichert. Jedoch kommt es dabei immer zu einem ca. 10 sec Lag wo nichts mehr funktioniert.
    Ich habe die Querys schon auf das Mindeste Reduziert, jetzt wollte ich fragen, was man noch machen kann.


    Meine Ideen waren:


    1. Sobald ein Wert geändert wird im Script. z.B. Geld abheben wird der Account gespeichert.
    2. Für jeden Spieler einen Timer wenn er connected von 30 min
    3. Accountdaten nacheinander Speichern, also z.b. nach 30 min wird eine Funktion aufgerufen die Speichert alle Accountdaten nur nacheinander



    zu 2. Ich denke das ist quatsch da dies eh ressourcenfressender ist.
    zu 3. Also ich meine das so: Es wird jede 30 Min ne Funktion aufgerufen, der Speichert die Accountdaten NACHEINANDER



    Jetzt noch 3 Fragen:
    1. Was ist am effektievsten?
    2. Bzw. was würdet ihr machen??
    3. Und bring 3. überhaupt was, wenn ja, könntet ihr mir helfen wie ich das Scripten müsste?


    MfG. Cody09

  • Wenn der Timer der alle 30 min los geht sag ich mal im 10 - 15 sec takt 1 Acc speichert, 0 Lag, wäre am besten Also der erste Timer called den 2 Timer der solange druch läuft bis die maximale Spieler Anzahl (in i < MAX_PLAYERS z.B) erreicht ist.

  • Bei news:
    new accs_tmp = 0;
    new acctimer;
    forward aAccs();
    forward save1acc();


    OnGameModeInit:
    SetTimer("aAccs", 1800000, 1);


    Neue Funktion aAccs():
    public aAccs(){
    acctimer = SetTimer("save1acc", 3000, 1);
    }



    Neue Funktion save1acc():
    public save1acc(){
    if(accs_tmp >= MAX_PLAYERS){
    KillTimer(acctimer);
    accs_tmp = 0;
    }
    SavePlayer(accs_tmp);
    accs_tmp++;
    }


    SavePlayer(accs_tmp) musst du dementsprechen deiner Account Speicherung anpassen



    //Edit: mfg ReVide :D

  • naja, dein script ist nicht so effektiv:
    if(accs_tmp >= MAX_PLAYERS)


    dauert nen bissle lange oder? da MAX_PLAYERS standart auf 500 ist, und wenn man isplayerconnected einbaut geht laut deinem script es trotzdem bis 500
    ich glaube ich werde morgen mal methode 1 versuchen

  • Falls du Godfather, oder sowas wie payday's hast, speichere einfach jeden Account bei seinem payday. (vorrausgesetzt nicht jeder hat ihn zur gleichen zeit)


    Aber allgemein würde ich sagen, das ein 10 Sekunden lag nicht normal ist, auch nicht für 140 querys.

    The fact is, I am right. And if you think I'm wrong, you are wrong.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen