HSA - Einfaches, schnelles Speichern!

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
  • Dini ist die lahmste fileinclude, nur wollen das die leute nicht war haben...


    Propaganda ist alles, man kann schon das ganze druchbringen, einfach ein paar Releases mit dem Include Release im Englischen Samp Forum mit bezeugnis das seins das schnellste ist im vergleich zu SII und sehr viel besser & schneller als Dini z.B. vllt


    aber ich hätte da noch ne Frage,


    und zwar, z.B. bei einem Save-All Befehl und nehmen wir an, ein User hat 200 Werte die gesetzt werden müssen.
    Bei 200 User online, kommt es da zu laggs ?

  • Kannst du die Beispielcodes zeigen, mit denen du die SII und HSA Testläufe gemacht hast?


    Würde mich auch interessieren. Glaube nicht,dass SII wirklich langsamer sein soll als deins. Daher wäre es wirklich gut,mal den Testcode zu sehen ;).


    Wenn Speed wirklich so wichtig ist,dann schaut auch Y_INIan ( Y_Less ) oder DOF2 ( Double-O-7 ) im offiziellem Forum.Letzteres benutzt sogar hashing, um die Einträge schneller zu finden.


  • Würde mich auch interessieren. Glaube nicht,dass SII wirklich langsamer sein soll als deins. Daher wäre es wirklich gut,mal den Testcode zu sehen ;).


    Wenn Speed wirklich so wichtig ist,dann schaut auch Y_INIan ( Y_Less ) oder DOF2 ( Double-O-7 ) im offiziellem Forum.Letzteres benutzt sogar hashing, um die Einträge schneller zu finden.


    Stimmt wäre recht interessant DOF2 wird jedoch nicht mehr supportet


    http://pastebin.com/ujet3ySE ist anscheinend der Vergleich zwischen y-ini dof2 dof1 etc.

  • Für 200 Einträge bei 200 Dateien braucht HSA ca. 40 Sekunden. (Laut Test)

    new temp[32];
    StartBench();
    for(new o = 0; o < 200; o++) {
    for(new i = 0; i < 200; i++) {
    format(temp,32,"int_%d",i);
    setInt:"testfile"(temp,1000);
    }
    }
    StopBench();


    Allerdings wird eine "Save-all" Funktion bei der Verwendung von HSA in den meisten Fällen überhaupt nicht mehr gebraucht.

    PAWNit gratis nutzen?
    Geschenkcode: 2017VQXPKB8V3KA

    Hier könnte Ihre Werbung stehen.

  • SII wird in diesem Fall bestimmt schneller sein.
    Es geht hierbei auch um das Speichern von einer geringeren Anzahl von Datensätzen.
    SII speichert alle 200 in einem Zug. HSA jedes einzeln.


    Cody09: Genau das ist der Einsatzbereich dieser Include.


    Ich werde mal versuchen eine Grafik zu erstellen, wann SII besser schneller ist im Speichern mehrerer Daten.

    PAWNit gratis nutzen?
    Geschenkcode: 2017VQXPKB8V3KA

    Hier könnte Ihre Werbung stehen.

  • Ich hab mal einen Test gemacht:


    Ergebnis:



    Source:


    /*
    Timing test

    */
    #define FILTERSCRIPT
    #include <a_samp>
    #include dini
    #include hsa
    #include SII


    #define TEST_RUNS 9
    #define TEST_LOOPS 1000


    new result[3];


    forward StartTest();
    public StartTest() {


    printf(" --- HSA vs DINI vs SII (%d a %d)",TEST_RUNS,TEST_LOOPS);
    for(new i ; i < TEST_RUNS ; i++ )
    {
    new
    tick2,
    tick3,
    tick1,
    tick4;
    tick1 = GetTickCount();
    for(new j ; j < TEST_LOOPS ; j++)
    {
    setInt:"Fraktionskassen"("Polizei",81921);
    setInt:"Fraktionskassen"("Feuerwehr",56121);
    setInt:"Fraktionskassen"("Yakuza",1912);
    setInt:"Fraktionskassen"("Lufthansa",917251);
    setString:"Fraktionskassen"("Passwort","Ich mag Züge");
    setInt:"Fraktionskassen"("Bargeld",4125);
    setFloat:"Fraktionskassen"("Leben",74.12);
    }
    tick2 = GetTickCount();
    for(new j ; j < TEST_LOOPS ; j++)
    {
    if(!dini_Exists("Fraktionskassen")) dini_Create("Fraktionskassen");
    dini_IntSet("Fraktionskassen","Polizei",81921);
    dini_IntSet("Fraktionskassen","Feuerwehr",56121);
    dini_IntSet("Fraktionskassen","Yakuza",1912);
    dini_IntSet("Fraktionskassen","Lufthansa",917251);
    dini_Set("Fraktionskassen","Passwort","Ich mag Züge");
    dini_IntSet("Fraktionskassen","Bargeld",4125);
    dini_FloatSet("Fraktionskassen","Leben",74.12);
    }
    tick3 = GetTickCount();

    for(new j ; j < TEST_LOOPS ; j++)
    {
    INI_Open("Fraktionskassen.ini");
    INI_WriteInt("Polizei",81921);
    INI_WriteInt("Feuerwehr",56121);
    INI_WriteInt("Yakuza",1912);
    INI_WriteInt("Lufthansa",917251);
    INI_WriteString("Passwort","Ich mag Züge");
    INI_WriteInt("Bargeld",4125);
    INI_WriteFloat("Leben",74.12);
    INI_Save();
    INI_Close();
    }
    tick4 = GetTickCount();
    printf("HSA %04dms",tick2 - tick1);
    printf("DINI %04dms",tick3 - tick2);
    printf("SII %04dms",tick4 - tick3);
    new
    HSA = tick2 - tick1,
    DINI = tick3 - tick2,
    SII = tick4 - tick3;
    printf("Gewinner Runde %d -> %s",(i+1),(HSA < DINI && HSA < SII) ? ("HSA") : ((DINI < HSA && DINI < SII)?("DINI"):("SII")));
    if(HSA < DINI && HSA < SII) result[0]++;
    else if(DINI < HSA && DINI < SII) result[1]++;
    else result[2]++;
    }
    printf("Siege für HSA %d",result[0]);
    printf("Siege für DINI %d",result[1]);
    printf("Siege für SII %d",result[2]);
    printf(" --- Test beendet!");
    return 1;
    }


    public OnFilterScriptInit() {
    SetTimer("StartTest",1800,false);
    return 1;
    }

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • @BlackAce: Das ist kein wirklicher Vergleich. Das ist so, als würde man einen Bus mit einem Auto vergleichen.
    Für ein paar Personen ist das Auto schneller, und transportiert diese schneller zum Ziel.
    Der Bus nimmt gleich die 10 Fache Menge an Menschen mit, und wird somit trotz der längeren Fahrzeit nach einer gewissen Zeit das Auto schlagen. Denn das Auto muss den Weg immer wieder zurück fahren...

    PAWNit gratis nutzen?
    Geschenkcode: 2017VQXPKB8V3KA

    Hier könnte Ihre Werbung stehen.

  • Natürlich kann man das, unter gewissen Umständen.
    Man sollte beachten, für welchen Zweck die Includes entworfen wurden.
    Das Einsatzgebiet von HSA ist, wie in der Beschreibung erwähnt, das Speichern von Single-Entries - Also einzelne Datensätze.
    Du kannst ja mal HSA gegen SII und Dini antreten lassen, wenn nur ein oder 2 Datensätze geschrieben werden sollen...


    Wenn bei jeder Variablen-Änderung direkt einmal gespeichert wird, wird das höchstwahrscheinlich weniger Serverprobleme verursachen, als wenn man alle Daten aufeinmal schreibt. Natürlich kann man das nicht für jedes Einsatzgebiet verallgemeinern.

    PAWNit gratis nutzen?
    Geschenkcode: 2017VQXPKB8V3KA

    Hier könnte Ihre Werbung stehen.

  • Das ist doch bescheuert.Der Test von BlackAce hat doch eindeutig bewiesen,dass SII selbst schneller ist als HSA.
    Der Vergleich mit Bus und Auto hingt auch hinterher. Um es mit Auto und Bus zu vergleichen,streichen wir den Bus.


    Wir haben Auto A ( HSA ) und Auto B ( SII ).
    Auto A fährt jeden Fahrgast einzelnt zum Ziel. Auto B dagegen fährt alle Gäste zusammen zum Ziel. Auto A wird höchstwahrscheinlich für den Fall von 1 Gast schneller sein. Natürlich ist der 1 Fahrgast deutlich eher dort,als jeder der Gäste von Auto B. Es wird aber niemals der Fall sein,dass Auto B langsamer alle Gäste befördert als Auto A jeden Gast einzelnt :wacko: .


    //Edit:
    Dann solltest du aber auch im Startpost hinzufügen,dass der Test nur gilt für das Schreiben von einzelnen Einträgen. Jetzt glauben sowieso schon zu viele,es wäre schneller als SII, was ja nicht unbedingt stimmt. Für einen Sonderfall ist es schneller, nicht für den normalen gebrauch. Denn du weisst sicherlich selber, wie oft speicherst du einen Einzelnen Eintrag ;) ?

  • Geht ja nicht darum, dass HSA schlecht ist oder langsam ist im allgemein oder sonst was - lediglich die Aussage, dass es schneller als SII ist kommt einfach nicht hin. ;)



    Man solllte nur Sachen mit dem gleichen Zielgebiet vergleichen (zB eben HSA und DINI wegen Ein-Zeilen-Speicherung), und nicht HSA mit einem Teil von SII, der in der Form nicht gewollt ist.

  • Goldkiller: Das habe ich auch nicht geschrieben. Lies dir meine Posts bitte noch einmal genauer durch.
    Edit2: Jetzt habe ich das Missverständnis verstanden, bei meinem Beispiel ist die Fahrzeit die Zeit zwischen Lesen und neu Schreiben. Diese ist bei einem Bus natürlich deutlich höher als bei einem Auto. Allerdings transportiert dieser eine Größere Menge an Menschen, und wird somit das Auto bei größeren Mengen schlagen.
    Ich hoffe das ist nun verständlicher...


    Edit: "Dabei wurden 10 mal 100 Einträge hintereinander in eine Datei geschrieben und wieder ausgelesen." Sagt doch aus, dass hintereinander 100 Einträge geschrieben wurden.
    Wo liegt denn nun das Problem?

    PAWNit gratis nutzen?
    Geschenkcode: 2017VQXPKB8V3KA

    Hier könnte Ihre Werbung stehen.

  • @Hauke
    Hier das ergebnis.
    Viel schneller ist das ja auch nicht.
    Aber wer speichert denn die Vars einzelen?


    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski


  • Edit: "Dabei wurden 10 mal 100 Einträge hintereinander in eine Datei geschrieben und wieder ausgelesen." Sagt doch aus, dass hintereinander 100 Einträge geschrieben wurden.
    Wo liegt denn nun das Problem?


    Das ließt definitiv der Großteil aller Leute so:
    for(new i = 0 ; i < 10 ; i++) {
    hsa_write("bla1","irgendwas");
    hsa_write("bla2","irgendwas");
    ...
    hsa_write("bla99","irgendwas");
    hsa_write("bla100","irgendwas");
    }

    Steht ja auch dort so :-O!


    //Edit:
    Bin hier fertig. Hier dreht man sich jetzt sowieso nur noch im Kreis :p.