IBGDB
Die Indie Browsergame Datenbank - Unabhängig & Ehrlich.
you are not logged in
Login

Brauche Tipps zur Datenbank-Optimierung

WedPMCETECET0FebE
Brauche Tipps zur Datenbank-Optimierung  

Ich habe seit einigen Monaten bei meinem Spiel AirlineSim ein ernstes Datenbankproblem, mir fehlt aber etwas das entsprechende Know-How um ihm zu begegnen. Evt. können die studierten Informatiker in dieser Runde etwas dazu sagen.

 

Folgende Situation:

Auf einem durchschnittlichen Server von AS finden pro Woche etwa 1 Million Flüge unter rund 170 bis 180-tausend Flugnummern statt. Immer wenn ein Flug durchgeführt wurde, wird für die laufende Kalenderwoche ein Statistikeintrag für die Flugnummer mit verschiedenen Werten angelegt bzw. ergänzt (Umsatz, Kapazität und Buchungen für Passagiere in Economy, Business, First sowie Fracht, Transferstatistiken (wieviele Passagiere von Partnerflügen, wieviele originär etc.), Anzahl Flüge usw.). Diese Einträge werden für 30 Wochen vorgehalten, um daraus Statistiken generieren zu können. In der Tabelle liegen also in aller Regel mehrere Gigabyte an Daten in zig Millionen Zeilen. Indizes gibt es für die Kalenderwoche, die Airline, die Allianz (if any), Ursprungsflughafen, Zeilflughafen und die Flugnummer.  Die Statistiken können vielfältig sein. Ein paar Beispiele:

  • Auswertung über Umsatz, angebotene Kapazität und Auslastung für eine Flugnummer für alle Passagiere oder einzelne Klassen
  • Das selbe für eine Route
  • Allgemeine Airline Rankings nach angebotenen Kapazitäten oder Auslastung (global oder ab einem bestimmten Land)
  • Auslastungsstatistiken für eine Niederlassung (Auslastungen für jede Route ab einer Niederlassung in dieser und der vergangenen Woche)
  • Verkehrsentwicklung an einem Flughafen über die vergangenen X Wochen
  • Marktanteile in einem Land oder an einem Flughafen nach Airline/Allianz oder Zielflughafen/Land
  • und viele viele mehr....

Wie man sieht gibt es für diese Daten nicht "eine" Auswertungsmöglichkeit, sondern denkbar viele. Entsprechend lassen sich die Reports auch schlecht bis garnicht cachen. Mein Problem ist nun, dass einige Queries extrem langsam sind. Insbesondere bei großen Airlines und bei anspruchsvollen Reports haben wir Ladezeiten die inakzeptabel sind.

Mir ist bewusst, dass es kein Allheimmittel dafür geben wird, aber evt. habt ihr ein paar Tipps, wie man mit solch einem Problem in der Regel umgeht und ob ggf. andere Technologien als die allgemein genutzte sinnvoll wären. Hier noch ein paar Infos, die evt. hilfreich sein könnten:

  • Fast alle Queries erfordern Aggregierungen
  • Statistiken über Passagiere, also nicht eine einzelne Klasse, sondern Eco+Business+First erfordern eine Addierung der entsprechendn Spalten
  • Für Sitz-/Frachtkilometer-Statistiken wird die Flugentfernung mitgespeichert, mit der in Queries multipliziert und dann aggregiert wird
  • Statistiken auf höheren geographischen Ebenen als Flughäfen (Land, Kontinent) werden per Join über die Airport-Tabelle ermöglicht
  • Datenbank ist MySQL, Storage-Engine ist InnoDB
  • Daten werden i.a.R. ein mal pro Minute geschrieben (also deutlich weniger writes als reads)

Wenn noch mehr Infos benötigt werden, einfach melden.

Vielen Dank für eure Hilfe!

ThuAMCETECET0FebE
 

Bin im Urlaub daher nur eine sehr kurze Antworet (Freundin mault schon)...

MongoDB eignet sich sehr gut für Aufgaben wie Logging/schrieben von Histories, weil es eine sehr hohe Schreibgeschwindigkeit hat. Aber das scheint ja nicht dein Problem zu sein, oder?

Hast du mal daran gedacht deine Statistiken vorzuberechnen oder wenigstens "vorzuaggregieren", um die Menge der Daten zu reduzieren?

Desweiteren...schau dir mal an, welche Statistiken überhaupt benutzt werden. Vielleicht gibt es ja einige wenige, die kaum benutzt werden, die aber aufwendig sind und die Lösungswege versperren...weniger ist manchmal mehr... die 80/20 Regel und so...

So long...

Maxx

ThuAMCETECET0FebE
 
Für mich hört sich das eher nach einen Konzept Fehler an! Nähmlich ist realitisch das dies auch Umgesetzt werden kann. Mir schein die Daten werden für das Game Automatisch generiert um es Relistischer zu gestalten. Entuell sollte man hier auch nach anderen Lösungwegen suchen statt sinlos haufenweiße Datenmüll zu produzieren der im Game so nie gebraucht wird. So werte für Einahmen und Ausgaben. Können anhang einer spezielen Formel auch errechnet werden. Dazu werden Durchschnittwerte herangezogen. Die Millionen Flüge sollten nicht ins Game integriert werden. Das könnt ihr wenn ihr wollt verwenden um Durchschnitt werte zu erhalten. Mfg Splasch ps. (nicht wundern das alles in einer Wurscht geschrieben steht dafür ist das Forum hier schuld)
FriAMCETECET0FebE
 

splasch kennts schon, aber vielleicht hilft es eurem System mal an den Füßen anzupacken: http://www.php.de/off-topic-diskussionen/80238-browsergame-tutorial-3.html#post623350

MonAMCETECET0FebE
 

@lunikon ... falls du Interesse hast, können wir uns über das Thema mal unterhalten im IRC. Ich bin im alten GalaxyNews IRC Channel zu finden oder auf FreeNode im #bbg.

MrMaxx