CN: PHP/MySQL Perfomance

Hallo,

nun ich bin dabei ein kleines CMS zu schreiben und bin nun auf die Frage gestoßen welche Art der Datenbankverbindung wohl vorzuziehen ist.

Kurze Erläuterung: --> === "einbinden"
Aufbau: index.php --> base.php --> settings.php

index.php - beherbergt den ganzen sichtbaren "content" welcher per "include" eingebunden wird.
base.php - beherbergt die ganze interne Verteilung und das einbinden von ausführenden Scripten.
settings.php - beherbergt die Datenbank Konstanten und meine Frage :-)

Also jetzt meine Frage:
Ist es performanter die Datenbankverbidnung beim Aufruf der Seite herzustellen und beim "logout" oder nach einem "timeout" wieder zu schließen, oder bei jeden Datenbankzugriff der einzelnen Scripte die Datenbankverbindung neu herzustellen und nach Beendigung diese wieder zu schließen?

  1. Ist es performanter die Datenbankverbidnung beim Aufruf der Seite herzustellen und beim "logout" oder nach einem "timeout" wieder zu schließen, oder bei jeden Datenbankzugriff der einzelnen Scripte die Datenbankverbindung neu herzustellen und nach Beendigung diese wieder zu schließen?

    Bei einem "kleinen" CMS dürfte das völlig egal sein - bei größeren Systeme mit separaten Datenbankservern ist es uu. sinnvoll, zu persistenten Verbindungen zu greifen, hier sollte man die Datenbank aber ohnehin nicht unnötig quälen und einen Cache-Mechanismus vorsehen.

    Siehe: Persistente Datenbankverbindungen (php.net)

    1. Siehe: Persistente Datenbankverbindungen (php.net)

      Ich hatte eigentlich nicht an eine persistente Verbindung gedacht sondern an eine normale "mysql_connect" Verbindung welche offen bleibt bis der User durch "logout" sich von dem Script abmeldet.

      1. Ich hatte eigentlich nicht an eine persistente Verbindung gedacht sondern an eine normale "mysql_connect" Verbindung welche offen bleibt bis der User durch "logout" sich von dem Script abmeldet.

        Wie stellst du dir das in einer Webanwendung vor? Der User ist in dem Fall nicht der User sondern der Webserver.

        1. @suit

          Wie stellst du dir das in einer Webanwendung vor? Der User ist in dem Fall nicht der User sondern der Webserver.

          Stimmt auch wieder. Geht ja schlecht ohne hotti's Methode.^^

          @hotti

          Der größte Overhead entsteht, neben dem Starten eines serverseitigen Prozesses (CGI) beim Anbinden an eine DB.

          Also keine ständigen connects und disconnects. Ok, dann werde mir jetzt erstmal alles über "Fast-CGI" ergoogeln. :-)

          Ich Danke euch für die Erleuchtung, jetzt ist der Groschen gefallen. (Vorläufig jedenfalls)

          1. @hotti
            »» Der größte Overhead entsteht, neben dem Starten eines serverseitigen Prozesses (CGI) beim Anbinden an eine DB.
            Also keine ständigen connects und disconnects. Ok, dann werde mir jetzt erstmal alles über "Fast-CGI" ergoogeln. :-)

            Prima, guck aber auch, ob Dein Provider sowas unterstützt, sonst bleibt das ein Wunschtraum.

            Viele Grüße,
            Horst Haselhuhn

            --
            Wenn die Kinder aus dem Haus sind und der Hund gestorben ist, ja dann beginnt das Leben...
  2. hi,

    Also jetzt meine Frage:
    Ist es performanter die Datenbankverbidnung beim Aufruf der Seite herzustellen und beim "logout" oder nach einem "timeout" wieder zu schließen, oder bei jeden Datenbankzugriff der einzelnen Scripte die Datenbankverbindung neu herzustellen und nach Beendigung diese wieder zu schließen?

    Der größte Overhead entsteht, neben dem Starten eines serverseitigen Prozesses (CGI) beim Anbinden an eine DB. Normalerweise ist es so, dass ein CGI-Script, was sich mit einer DB verbindet, diese Verbindung nach dem Beenden auch wieder schließt.

    Es gibt jedoch eine Möglichkeit, diesen Overhead nur einmal zu erzeugen, schau mal nach Fast-CGI. Ist ein Fast-CGI-Script einmal gestartet, hält dieses die Verbindung zur DB solange offen, bis es als Prozess beendet wird.

    Hotte

    --
    Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.