kostenloser Webspace werbefrei: lima-city


Querys optimieren

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    robbmaster

    Kostenloser Webspace von robbmaster

    robbmaster hat kostenlosen Webspace.

    Hallo. ;)
    Ich programmiere gerade (auch wenn eher als Hobby, nicht kommerziell - logisch) ein Browsergame. Grundsätzlich ist diese Art von Script darauf ausgelegt, möglichst hunderte von Usern gleichzeitig zu 'bedienen', daher werden verdammt viele Querys bedient.
    Was ich bereits für die Queryoptimierung getan habe?
    Die Daten in der MySQL Tabelle m_users lade ich vollständig über fetch_object in ein Objekt, da ich eine Menge Daten aus dieser Tabelle benötige (Name, Passwort, Level, blablabla).
    Dabei erstelle ich eine Kopie dieses Objekts.
    Dann arbeite ich das gesamte Script mit den Werten dieser lokalen Variablen. Erst am Ende wandel ich beide Objekte in ein Array um und vergleiche diese. Die Änderungen werden abschließend als UPDATE-Query an den MySQL-Daemon geschickt.
    D.h., in 60% der Scripts habe ich nur zwei Querys, einmal zu Beginn und einmal am Ende, spare also eine Menge Querys im Script. In Scripts, die mehr benötigen, folgen natürlich pro neue Tabelle min. 2, aber auch viele andere meiner Querys laufen ähnlich. Was kann man noch tun?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Interessante Methode.
    Wie viele Millisekunden braucht dein Script denn im Durchschnitt zum Generieren der Seiten?
  4. Ja, der Ansatz ist schon richtig. In etwa so machen das die ORM Frameworks auch.

    Was du jetzt tun kannst, ist die Tabellen und Queries selbst zu optimieren.

    Also, erstmal solltest du den slow_query_log auf eine Sekunde stellen. Damit findest du auf jeden Fall die richtig langsamen Queries heraus.
    Anschließend solltest du EXLPAINs bei allen deinen Queries ausführen und dementsprechend Indexe anlegen.
  5. Autor dieses Themas

    robbmaster

    Kostenloser Webspace von robbmaster

    robbmaster hat kostenlosen Webspace.

    zerojan schrieb:
    Interessante Methode.
    Wie viele Millisekunden braucht dein Script denn im Durchschnitt zum Generieren der Seiten?

    Die Zahl weiß ich gerade nicht - ich das Script allerdings später mal ausführen und die Infos extrahieren. ;)
    Dazu sollte allerdings noch gesagt sein, dass die Tabellen logischerweise noch nicht vollständig angelegt sind, da ich derzeit noch am technischen Grundgerüst arbeite, dazu wird das ganze lokal ausgeführt,d.h. die Anfrage an den Server ist logischerweise nur eine einzige gleichzeitig. Aber ich werde es trotzdem suchen.

    @Nikic: Danke, das werde ich mal testen.

    -> Ich habe schon mehrere Open-Source Scripte gesehen, wo der Kram in die Session ausgelagert wurde, und erst bei Logout wieder gespeichert. Allerdings fand ich diese Möglichkeit vollkommen sinnlos, da ein Timeout, oder auch nur ein PC-Absturz etc. alle Daten eines Spielers wieder resetten würde. ;) Ich denke, damit bin ich richtig?
  6. In die Session auszulagern ist grundsätzlich sinnlos, auch abgesehen von der Gefahr von Datenverlust. Sessions werden in stinknormalen Dateien gepeichert und sind damit recht langsam. Datenbanken können da bei weiten effektiver sein. Daher ist Auslagern in die Session oftmals keine Optimierung, sondern das genaue Gegenteil.
  7. Wie wärs mit Caching? Dann würdest du dir selbst die paar wenigen Queries tlw. auch noch sparen ;-)

    memcached, Zend_Cache, ... mal so als Google Tipps :-)
  8. Autor dieses Themas

    robbmaster

    Kostenloser Webspace von robbmaster

    robbmaster hat kostenlosen Webspace.

    nikic schrieb:
    In die Session auszulagern ist grundsätzlich sinnlos, auch abgesehen von der Gefahr von Datenverlust. Sessions werden in stinknormalen Dateien gepeichert und sind damit recht langsam. Datenbanken können da bei weiten effektiver sein. Daher ist Auslagern in die Session oftmals keine Optimierung, sondern das genaue Gegenteil.




    Meine Sessions laufen alle eine Memory-MySQL-Tabelle. (session_auto_save_handler)
    Daher sind diese deutlich schneller. Die Gefahr des Datenverlusts hingegen bleibt.
  9. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!