4 Stimmen

PHP-Pooling-Funktionalität (nicht nur Datenbankverbindungen)

Ist es möglich, Daten oder Funktionen in PHP zu bündeln?

Der laienhafte PHP-Code, den ich schreibe, wacht auf, um eine Antwort zu verarbeiten, lädt Funktionen, öffnet Datenbankverbindungen, erstellt Objekte, initialisiert sie und stirbt nach 0,01 Sekunden, wenn die Antwort verarbeitet wurde, so dass die nächste Anfrage erneut geladen, geparst und ausgeführt werden muss.

Das ist unsinnig, und ich finde, dass es den Wert eines Großteils meiner Arbeit schmälert, wenn ich keine Funktionalität/Daten/Objektpooling habe. Ich kann z. B. Klassen schreiben, die dann bei jeder Anfrage neu initialisiert werden - wozu soll ich dann noch versuchen, eine sinnvolle Objektstruktur zu entwickeln?

Also: Wie kann ich PHP schreiben, um Daten und Funktionen zu bündeln?

4voto

Wrikken Punkte 66796

In PHP gibt es kein 1 Solution Pooling oder persistenten Zustand, es hat keinen Anwendungszustand wie Java, es folgt mehr oder weniger dem zustandslosen Protokoll von HTTP. Was Sie tun können, ist:

  • Erstellen Sie persistente Verbindungen zu Datenbanken (d.h. sie werden wiederverwendet, wenn Sie sie mit denselben Parametern aufrufen, sie werden nicht auf magische Weise existieren, aber Sie können den Overhead einer tatsächlichen Verbindung vermeiden).
  • Speichern Sie Objekte in Sitzungen, um einen berechneten Zustand zu erhalten (sie werden serialisiert und bei der nächsten Anfrage deinialisiert).
  • Leiten Sie Arbeiten, die eine umfangreiche, aber einmalige Initialisierung erfordern, an einen Daemon weiter, der unabhängig vom Webserver läuft (ein gearman-Server und Worker kommen mir in den Sinn).
  • Aber wenn Ihre Anwendung einen globalen Status benötigt, ist PHP vielleicht nicht die richtige Lösung.

3voto

GolezTrol Punkte 111587

PHP ist fast nie der Engpass. Unsere Server verarbeiten in Spitzenzeiten Hunderte von Anfragen pro Sekunde. Und auch das sind keine kleinen Anfragen. Es scheint unlogisch, aber PHP ist tatsächlich sehr schnell. Und Sie können den APC-Cache verwenden, um vorkompilierte PHP-Dateien zwischenzuspeichern, damit es noch schneller wird. Dann können Sie MemCache verwenden, um Daten zu speichern, so dass alle Abfrageergebnisse und Daten einfach zwischengespeichert werden können, ohne auf den suboptimalen Abfrage-Cache von MySQL angewiesen zu sein.

1voto

Cem Kalyoncu Punkte 13357

Ich teile ähnliche Bedenken wie Sie, aber Seltsamerweise PHP ist rasend schnell. Abgesehen von Datenbankabfragen, die vom Server zwischengespeichert werden sollten, gibt es nur noch ein Verbindungsproblem. Diese können leicht gepoolt werden.

Meine Systeme müssen sogar eine mehrere KB große XML-Datei parsen, um Antworten zu erhalten. Der Flaschenhals ist immer noch der Datenbankserver.

Dieser vorübergehende Zustand von PHP hat jedoch auch eine gute Seite. Eine problematische Anfrage, die das System zum Absturz bringt, hat keine nachteiligen Auswirkungen auf die nächste Verbindung. Scheint mir stabiler zu sein.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X