[SQL allgemein] Auslastungsfragen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [SQL allgemein] Auslastungsfragen

    Hi Leute,

    da dies hier die einzige Abteilung ist unter der ich mir vorstelle mein Problem an der richtigen Stelle zu platzieren, lege ich mal los.

    Ich möchte ein Browsergame mit PHP und MySQL realisieren. Die Frage, die ich mir jedoch stelle, ist, wieviel Anfragen eine Datenbank idR standhält. Es werden im Verlaufe des Spiels ja sehr viele Daten abgefragt. Ich schätze es sind 10-15 Tabellen notwendig, die in der DB liegen. Wenn nun in ca. einer Minute von den Scripts 10 Abfragen gemacht werden und das nur auf einen Benutzer zutrifft, so könnte es schnell sein dass man bei 200 Usern ~ 2000 Abfragen die Minute hat. Die Frage ist, welche Taktiken und Tricks man dabei anwenden kann, um diese Zahl zu reduzieren. Denn sie wird sicherlich an der Geschwindigkeit knabbern. Ist es empfehlbar Sachen in Dateien abzuspeichern oder dauert das Abfragen der Dateien etvl. länger ? Ist es sinnvoll mehrere Datenbanken zu erstellen und die Tabellen darauf aufzuteilen? Es kommt natürlich auch immer darauf an, wieviel Inhalt in der Tabelle ist.

    Das sind so Fragen, die ich mir momentan stelle damit ich das alles planen kann. Ich hoffe ihr könnte euch dazu ein wenig auslassen, es wäre sehr nett!

    MfG n!c3

  • #2
    ist schon gut positioniert hier. evtl. passts auch ins brainstorming. aber ich lass es hier.

    generell solltest du mit der sql db so schnell keine probleme bekommen.

    sql ist in den meisten fällen besser geeignet, als die auslagerung in txt-dateien.

    1 db solllte bei 15 tabs ausreichen. das aufteilen auf mehere dbs würde nur dazu führen, dass die programmierung und pflege wesentlich komplexer werden. außerdem beraubst du dich dan den möglichkeiten von joins.

    programmiere saubere queries und du bekommst keine probleme.

    Kommentar


    • #3
      Das höre ich gerne. Hatte in der Richtung nur ein wenig Angst - hat man erstmal alles auf die Beine gestellt, und dann ist der Server bei zukommenden Benutzern akkut langsam, dann ist Mann am Code und das ist dann etwas mehr arbeit

      Ich werde das nochmal alles testen sobald es fertig ist - wir haben hier schon eine Tafel mit Joins und verknüpfungen beschrieben.

      Vielen dank!

      MfG n!c3

      Kommentar


      • #4
        Ich bin erst mal voll der Meinung meiner Vorredner ( - schöner Satz, wie im Verein )
        Hier ein paar Tips von meiner Seite:
        Tip 1. Bei O'Reilly neu erschienen:

        High Performance MySQL
        ======================
        1. Auflage, Jeremy Zawodny & Derek J. Balling

        312 Seiten, 38,- EUR,
        ISBN: 3-89721-388-5

        Probe-Kapitel: "Indizes" finden Sie online unter:
        http://www.oreilly.de/catalog/hpmysqlger/chapter/
        Ziemlich interessant!

        Tip 2. Namen der ID-Felder richtig vergeben:
        (ob das wirklich so ist, weiss ich nicht so genau)
        Ich habe mal gelesen, das MySQL besser arbeitet, wenn man die PrimaryKey-Felder eindeutig benennt,
        Also:
        Tabelle 1 hat den PK im Feld 'Tab1_ID'
        in Tabelle 2 benötigst du diesen, um die Relationen in deinen Querys herzustellen.
        also hat deine Tabelle 2 den eigenen PK im Feld 1 mit Namen 'Tab2_ID' und das 2. Feld mit ID-Bezug zu Tabelle 1 heisst auch wie in Tabelle 1, also 'Tab1_ID' .

        Tip 3. Bestimmte Prozesse als Cronjobs in das Linux-System auslagern:
        Beispiel bei uns: Wir haben eine Datenbank, die mit einem externen XML-Stream gefüttert wird, und zwar ziemlich oft (60 Sek).
        Da haben wir eine PHP-Datei für die Shell geschrieben, die unabhängig vom Apache/PHP auf der Konsole ausgeführt wird und als Cronjob eingebunden.

        Und als letzten Tip:
        Für die PHP->MySQL-Applikation eine sauber programmierte DB-Klasse benutzen.
        Das erleichtert meistens Programmieraufwand, Prozesse werden richtig geschlossen, Wechsel zu anderen SQL-DB's (z.B. PostGre etc) ist schnell möglich.

        Nicht zu vergessen, regelmässig OPTIMIZE und ab und zu REPAIR (für die Indize-Dateien wichtig lt. o.g. Buch) in MySQL ausführen.

        Und selbst auch mal Wochenende machen, um sauber zu programmieren.

        Schönes Wochenende
        Guido

        Kommentar


        • #5
          was ist den schneller?

          Eine verschachtelte Select Abfrage (18 Selects)

          oder 5 einzelne Abfragen

          die ich mit PHP an die DB schicke?
          (wen man es überhaupt pauschal sagen kann)

          Kommentar


          • #6
            Wir haben für MySQL einen separaten Server und nutzen das auch, um den WebServer zu entlasten. Aber ob das bei einer 18fachen Verschachtelung noch effektiv ist ...?
            Am besten testen und Microtime messen, würde ich sagen ...

            Kommentar

            Lädt...
            X