Generic: CGI-»FastCGI

Hy everybody,

ich habe ein kleines Problem mit eine CGI-Script. Es muß eine riesige Datei (ca. 10MB) auslesen und verarbeiten. Das geschieht etwa 3000-4000 mal am Tag. Jetzt habe ich was von FastCGI gelesen, was vor allem die Datenverarbeitung beschleunigt. Kann mir jemand erklären, wie ich ein "nochmales" CGI in FastCGI umwandle? Die Module sind im Server schon geladen...

Wäre auch für Anregungen sehr dankbar.

Generic

  1. Hallo,

    Also ich glaub nicht, daß FastCGI bzw. auch mod_perl wirklich schneller ist, wenn Du große Datenbestände bearbeitest.
    Diese Techniken sind vor allem dafür gedacht, den Programm-Overhead zu minimieren, also das Starten der Scripts und die Werte-Übergabe vom Server zum script usw.

    Wenn das Script einmal gestartet ist und alle Parameter übergeben sind, dann läuft das Script auch unter mod_perl nicht rascher als ohne.

    Du solltest Dir den Code eher nach anderen Performance-Bremsen durchsehen. Große Dateien sind beim reinen Einlesen auch nicht so unbedingt das Thema, aber wenn viele Zeilen analysiert und zerlegt und weiterbearbeitet werden, dann kann das schon dauern.
    Auch große Arrays bzw Hashes können ein Performance-Problem werden. DA hilft meist nur eine Streamverarbeitung, ohne großes zwischenspeichern der Daten im Memory.
    Ein
    open(BIGFILE,"$filename");
    @GigantArray = <BIGFILE>;
    close(BIGFILE);

    kann da schon dauern.
    Ich glaub nicht, daß Du alle 10 MByte zum Browser schickst, daher ist es meist performanter wenn DU

    open(BIGFILE,"$filename");
    while(<BIGFILE>)
       {
       &ProcessDataLine($_);
       }
    close(BIGFILE);

    machst, da der Speicher nicht vollkommen ausgefüllt wird.

    Abder das sind alles nur Vermutungen.

    Vielleich kannst Du ja den relevanten Code-Teil posten, dann sehen wir weiter.

    Grüße
       Klaus

    1. Hallo Ihr,

      Also ich glaub nicht, daß FastCGI bzw. auch mod_perl wirklich schneller ist, wenn Du große Datenbestände bearbeitest.
      Diese Techniken sind vor allem dafür gedacht, den Programm-Overhead zu minimieren, also das Starten der Scripts und die Werte-Übergabe vom Server zum script usw.

      Wenn das Script einmal gestartet ist und alle Parameter übergeben sind, dann läuft das Script auch unter mod_perl nicht rascher als ohne.

      Das stimmt nicht ganz, denn FastCGI hat nämlich noch einen Vorteil: Variablen bleiben definiert, bis das Script beendet wird! D.h. liest er erstmal die 10 MB große Datei ein, hält das Script sie im Speicher und kann mehrere Requests handeln, ohne die Daten erneut einlesen zu müssen.

      Info und Docs zu FastCGI: http://fastcgi.com
      Info und alles zu mod_perl: http://perl.apache.org/

      Gruß
      Cruz