Neuentwicklung Geekwars

  • Hallo zusammen,


    höchste Zeit mal wieder was zu schreiben:


    Die Konversationen sind online! Endlich nicht mehr nur Schiffe sondern auch Flames schicken! Aber bitte reißt euch zusammen und übertreibst nicht, will nicht das "Sperren" ausprobieren ;) Sollte es Probleme geben (Nachrichten werden nicht zugestellt, die falschen Leute können die Nachrichten lesen,...) bitte fleißig den Bug-Bereich nutzen!


    Weiter gehts mit dem KB-Tool und der Landing Page

  • Und mal wieder wird's Zeit für ein kleines Update:

    • KBs können ohne Login geöffnet werden
    • Nachrichten werden auf das Vorhandensein eines Empfängers der nicht der Absender ist und eines Betreffs geprüft
    • Die Koordinaten von zurück kehrenden Flotten werden in den Flottennachrichten richtig angezeigt


    Die Programmierung von der Landing-Page und dem KB-Tool dauert immer noch an...

  • So, hallo zusammen!


    In den letzten Tagen habe ich mich primär mit der Landing-Page beschäftigt, die fast fertig ist - das KB-Tools ist ein Teil davon und eigentlich auch der letzte.


    Zum Performance-Problem beim EH (für die technisch interessierten):

    Wir haben unsre Flotten-Ereignisse in einer Tabelle (nennen wir sie fleet_events) stehen, in der alles wichtige von dem Flotten-Event steht, was man so braucht, z.B.:

    • Wer hat die Flotte verschickt
    • wo ist sie losgeflogen
    • wohin ist/war sie unterwegs
    • welche Zusammensetzung hat die Flotte
    • Wann ist sie gestartet
    • Wann kommt/kam sie an
    • Wann kommt/kam sie zurück bzw. wäre sie zurück gekommen
    • ist sie noch unterwegs? (nennen wir es active und legen einen Index darauf, damit wir schnell nur die bekommen, die wirklich noch unterwegs sind)
    • wann muss sie vom EH abgearbeitet werden (ist entweder Ankunfts- oder Rückkehrzeit oder leer, wenn die Flotte zerstört wurde oder zurück gekommen ist) (nennen wir die Spalte event_time und legen auch einen Index drauf, damit wir schnell die ersten wichtigen bekommen)
    • und noch ein paar andere Informationen


    Was macht nur der EH? Er fragt die Datenbank nach dem ersten Event, welches aktuell abgearbeitet werden muss und lässt sich die nötigen Informationen zusammensuchen (d.h. Das erste Event auswählen, Spieler, Planeten, etc dran hängen und dann verarbeiten). In SQL würde das etwa so aussehen:

    SQL
    1. SELECT (...) FROM fleet_events JOIN (....) WHERE fleet_events.active = 1 AND event_time >= NOW() ORDER BY event_time ASC LIMIT 1;

    Zu deutsch: Gibt mit diverse Daten (...) aus fleet_events, hänge andere Informationen dran (JOIN (....)) und zwar von den Ereignissen, die noch aktiv sind und nur den ersten, der spätestens jetzt abgearbeitet hätte werden sollen.


    Als wir gemerkt haben, dass der EH zu langsam geworden ist, habe ich mal in die Datenbank geschaut, ob mir bei den ersten 10 Events was komisches auffällt; also Abfrage wie oben, nur LIMIT 10 statt LIMIT 1. Was passiert? Die Datenbank liefert innerhalb 0,08 Sekunden (so hat sie gesagt, hab es nicht selbst gemessen) 10 plausible Zeilen. Erst mal unauffällig, also wo anders den Fehler gesucht... Logs durchsucht, Probleme mit der Datenqualität gesucht (nicht vorhandene oder doppelte Flottenkonstellationen oder Planeten) und solche Dinge. Als das alles nicht geholfen hat, hab ich angefangen, im EH nach jedem wesentlichen Schritt, die Zeit zu nehmen, die dieser braucht. Hat auf meinem Laptop wunderbar funktioniert - mit dem letzten Backup aus dem Spiel. Dann auf dem Server ausprobiert und es war wieder langsam. Und zwar genau bei der Abfrage von oben.


    Also nochmal manuell die Abfrage ausprobiert, mit LIMIT 1. Was kam raus: zwischen 28 und 49 Sekunden - für die erste Zeile. Wenn ich 10 oder 5 oder 20 Zeilen wollte, immer unter 0,2 Sekunden.


    Was würde ich erwarten: Die Datenbank schaut in den Index für event_time (ähnlich dem Inhaltsverzeichnis in einem Buch), um das Event, zu finden, welches das mit dem kleinsten (frühesten) Abarbeitungszeitpunkt ist und aktiv ist und nimmt dann jenes. Oder eben die ersten 10 oder 5 oder 20.


    Was die Datenbank getan hat - denn sie ist ja schlau:

    Wenn der EH eh nur das Ereignis haben will, das den kleinsten Auslösungszeitpunkt hat, kann sie ja einfach den Index - der schon sortiert ist - einfach mal ignorieren, durch alle 1,5 Mio fleet_events durch gehen und sich das Minimum raus suchen und dann das Ereignis raus suchen, welches diesen Zeitpunkt hat. Dauert zwar lang, aber ist ja egal.

    (Falls das jemand nachvollziehen will - einfach EXPLAIN vor die Query schreiben, dann "erklärt" die Datenbank, was sie vor hat zu tun)


    Bei den schnelleren Queries, bei denen mehrere Events gefragt sind, funktioniert das oben genannte System nicht, da wir ja mehrere brauchen und nicht nur das Minimum. Da hilft nur ein: Die Indices verweden und einfach die ersten 10 Einträge raus suchen. Geht schnell, denn genau dafür haben wir die ja. Und zack, da sind die Zeilen (auch hier wieder die Ausgabe von EXPLAIN hilfreich, denn da sehen wir, dass die DB zuerst in den Index von active schaut).


    Die Abhilfe war dann, der Datenbank zu sagen, dass sie bitte immer den zweiten Weg gehen soll, also die Nutzung des Index zu erzwingen:

    SQL
    1. SELECT (...) FROM fleet_events FORCE INDEX (active) JOIN (....) WHERE fleet_events.active = 1 AND event_time >= NOW() ORDER BY event_time ASC LIMIT 1;

    Und schon läuft der EH wieder und kommt locker hinterher.


    Bei Fragen oder Verbesserungsvorschlägen gerne melden.

  • Hallo zusammen,


    ich habe am Wochenende eine lange und freundliche Mail von einem Spieler bekommen. Er war besorgt, dass es im Moment so viele Probleme bei der Performance gibt und ich mich gleichzeitig so rar gemacht habe. Das stimmt leider, die vielen Feiertage haben mein Zeitmanagement ziemlich aus der Bahn geworfen; die Neugestaltung der Landing Page lief auch sehr trägt.


    Mit dem gerade eingebauten Logging hoffe ich rauszufinden, warum genau das Spiel manchmal so lagt, damit die Nightly bald wieder spielbar wird. Ich bin gespant, was dabei heraus kommt.


    Mit dem letzten Schliff für die Landing Page hoffe ich, diese im Laufe der Woche live nehmen zu können, damit auch anonymisierte KBs hochgeladen werden können und die Seite generell ansprechender wird.


    Wenn das Thema Landing Page abgeschlossen ist, geht es dann an Allianzen, die hoffentlich etwas schneller umzusetzen sind. Am Anfang wird es wohl einen Admin und Mitglieder geben, ohne Ränge mit Funktionen, das kann dann ja in der Alpha noch kommen, erstmal soll es spielbar sein...

  • Ich habe mir noch ein paar Gedanken zum Datenmodell gemacht und werde ein paar Sachen umbauen, damit die Performance wieder besser wird.


    Das bedeutet zwar, dass ich wieder die Chance bekomm, viele neue Bugs in den EH und das Frontend einzubauen, dafür sollte es danach aber wieder flüssiger laufen und "zukunftssicher" sind. Zudem sind einige der Anpassungen ohnehin nötig, um z.B. das Löschen von Planeten zu erleichtern.


    Kleiner Randeffekt wird wohl sein, dass ein mal am Tag die Benachrichtigungen gelöscht werden, die sich auf Ereignisse beziehen die länger als x Tage her sind (vermutlich 10 oder 14). Die Ereignisnachrichten sind dann immer noch da, nur werden sie nicht mehr als neu angezeigt/gezählt. Das sollte aber im Spiel nicht wirklich behindern, denke ich. Bei Einwänden gerne melden...

  • Hi zusammen,


    wie ihr ingame sicher schon gemerkt habt, haben die ersten Anpassungen nicht so viel gebracht.


    Kurz zum Problem:

    • Flottenereignisse werden unabhängig davon, ob sie schon vom EH abgearbeitet sind und nicht mehr benötigt werden oder nicht in der selben Tabelle abgelegt. Daher muss beim Aufruf der Startseite immer nachgeschaut werden, welche Flotten noch unterwegs sind.
    • Ähnliches gilt für die Zählung der noch nicht gelesen Berichte, die auf alle Nachrichten zurück greift.
    • Ursprünglich war das das Ziel, dass die Indices auf den Tabellen dafür sorgen, dass Anfragen trotzdem schnell genug sind. Leider ist es nicht so performant, wie ich gehofft hatte.
    • Um das effizienter zu machen, baue ich die Berichte und Flotten so um, dass als neu zu markierende Berichte und aktive Flotten in separaten Tabellen referenziert werden und Referenzen dort gelöscht werden, wenn sie nicht mehr gebraucht werden. Dadurch bleiben zur Nachvollziehbarkeit alle Informationen gespeichert, aber die Zugriffe auf aktuell relevante Informationen sind schneller.


    Ich baue das Spiel noch weiter um, aber aktuell haben leider zu viele andere beruflichen und private Sachen auch hohe Prioritäten, daher komme ich wenig dazu. Tut mir leid, dass ihr so lange auf flüssigen Spielfluss warten müsst.

  • Da das Löschen alter Flotten nicht den gewünschten Erfolg gebracht hat - Flotten, nicht Berichte - gibt es jetzt wieder eine Angriffssperre.


    Aktueller Stand beim Umbau:

    • Datenmodell ist angepasst
    • Frontend in den letzten Zügen
    • EH kommt dann noch, da sind auch Anpassungen nötig. Die sind aber hoffentlich nicht so groß
  • Hallo zusammen,


    wie ihr leider gemerkt habt, gabs schon vor dem Ende massive Probleme mit der Performance. Liegt wohl daran, dass einige nicht ganz manuell versucht haben, fleißig Flotten loszujagen. Leider kam dann noch ein Bug dazu, der die Datenbank gelockt hat (Deadlock). Daher ist das Spiel kurzfristig off, ich spiele ein Backup ein und dann gibts wieder eine Att-Sperre.


    Tut mir wirklich sehr leid, dass die Probleme noch nicht behoben sind. Trotzdem Danke an alle für die Geduld!


    Grüße Mautz


    Kleiner Nachtrag:

    Nachdem es beim Eintragen der Att-Sperre noch einen Typo gab, nochmal ein Backup und die richtige Att-Sperre...

    Sollte es durch das Backup noch Probleme geben, bitte per PN bei mir oder Blacky melden

  • HI zusammen,

    wie ihr sicher gemerkt habt, war es leider mit dem Scharfschalten der Flotten wieder vorbei mit der Performance. Da ich gerade unterwegs bin, ist die nichtig erst mal offline; ich spiele morgen Vormittag ein Backup ein und vergrabe mich wieder im Code....<X

  • Hallo zusammen,


    leider dauert es doch länger als geplant - leider auch weil ich selbst im Urlaub bin und die Familie dann vor Programmieren geht. Dadurch fällt es mir etwas schwierig, im Vorfeld abzuschätzen, wann die nötigen Schritte umgesetzt sind. Ein paar Dinge fehlen noch, aber fertig ist die Umsetzung leider noch nicht...


    Noch ein Wort zur Verlängerung der rollierenden Sperre
    Grundgedanke dahinter war es, das Spiel so schnell wie möglich wieder live zu nehmen, sobald es wieder läuft. Ich verstehe, dass es deprimierend ist, wenn die Attsperre ständig verlängert wird. Den Stimmen im Forum folgend verlängere ich die Art-Sperre nochmal um 12 Tage, dann ist die Umsetzung sicher fertig und ich hatte ausreichend Zeit um zu Testen. Vermutlich ist es schon vorher fertig, aber sicher ist sicher...


    Danke für eure Geduld!

  • Hallo zusammen,

    es gibt grad nochmal ein Backup vom Mittwoch (ja, leider so alt) mit einer Angriffssperre bis morgen Abend, da leider noch was schief gelaufen ist.

    Tut mir leid, dass die letzte Woche damit quasi dahin ist, aber so bleiben die Daten konsistent.

    Dafür sollten die Logins von Anfang an wieder funktionieren und ein paar weitere Bugs behoben sein.


    *UPDATE*

    Sollte wieder up sein

  • Mal wieder ein Update...


    Da das Spiel wieder einigermaßen flüssig läuft und auch fleißig von einem anonymen Hochleistungstester auf Belastbarkeit getestet wurde, gibt es ein neues Feature, dass welches nun getestet wird: die Account-Speere!


    Als nächstes kommt die Account-bearbeiten-Funktion inklusive Löschen, da es leider aktuell ein paar Anfragen dazu gibt ?(

  • Hallo zusammen,

    endlich mal wieder was neues: Seit dem Update gerade eben könnt ihr unter Einstellungen euren Account nun selbst löschen.


    In den nächsten Tagen werde ich das so umstellen, dass es wie gewohnt erst nach einer Woche zur Löschung des Accounts kommt, sodass keine "taktischen Löschungen" möglich sind, um eine Abfangen zu verhindern...

  • Hallo zusammen,


    wird Zeit sich mal zum aktuellen Status und dem weiteren Plan zu schreiben. Wie ihr alle gemerkt habt, hab ich mich immer rarer gemacht und auch in der Entwicklung ist kaum mehr etwas vorwärts gegangen. Dafür gibt es sicher private Gründe, aber ein bisschen habe ich es mir auch selbst schwer gemacht, indem ich dem "reibungsfreien" Betrieb der Nightly so viel Beachtung geschenkt habe. Dadurch konnte ich die aktuellen Entwicklungsschritte nicht "rüber schieben" und habe dadurch deutlich an Antrieb verloren.

    Wie soll es da nun weiter gehen? Mit dem letzten Fix hoffe ich, das letzte Problem mit den verschwindenden Flotten/Rohstoffen behoben zu habe. Dadurch sollten wir ein brauchbares, wenn auch unvollständiges Spiel haben. Daher haben wir beschlossen, damit neu zu starten und in eine Alpha zu gehen. Start wird am 01.01.2019 um 20:00 Uhr sein!

    Die Alpha wird in gewohnter „einfacher“ Geschwindigkeit laufen und ist zeitlich vorerst nicht begrenzt. Zudem werden wir, insbesondere ich, mehr Zeit für den Support einplanen, damit das Spiel ordentlich läuft.

    Gleichzeitig erweitern wir das Logging und werten die vorhandenen Logs nochmal neu aus, um Scripter besser zu erkennen. Da wir in der Nightly noch nicht gegen dieser Spieler vorgegangen sind, hat das Betrügen wilde Blüten getrieben, aber so haben wir eine große Datenbasis, auf der wir auswerten können.

    Die Nightly wird indes weiterlaufen, aber diesmal tatsächlich ohne Garantie, immer stabil zu sein.


    Ein großesDanke an alle, die bisher so fleißig und geduldig getestet haben!