Sorcerer: Perl Script unterbrechen

Hallo

Auf die gefahr hin, dass ich gegenwind bekommen, weil es vielleicht schon einmal gefragt wurde (ich hab zwar gesucht, aber nix gefunden)..

Folgendes Problem..

eine suchmaschine soll bei einer gewissen anzahl von seiten eine volltextsuche durchführen.
dieses durchsuchen braucht natürlich server-CPU zeit, und da stehen leider nur 6 Sekuden zur verfügung, was nicht reicht, um alle seiten zu durchsuchen.
nun meine frage: gibt es eine möglichkeit, dem perl script zu sagen, dass es eine pause einlegt, und erst ein paar sekunden später weitersucht, damit das script weitersucht, und nicht nach 6 sekunden abbricht?
weil nach einer neuen suchanfrage stehen ja wieder 6 sekunden zur verfügung. weiß jemand eine lösung?

bin dankbar für jede anregung.

grüße

sorcerer

  1. Hi,

    dieses durchsuchen braucht natürlich server-CPU zeit, und da stehen
    leider nur 6 Sekuden zur verfügung, was nicht reicht, um alle seiten
    zu durchsuchen.

    Hm - 6s CPU-Zeit, was ist denn das fuer 'ne Monster-Seite? Bzw. was ist
    denn das fuer eine Suchmaschiene?

    Du solltest vielleicht mal dein Konzept ueberdenken. Ein guter Ansatz
    ist z. B. eine Indexierung der Seite - du schreibst alle Woerter bis auf
    wenige Ausnahmen in eine File - Ausnahmen deshalb, weil du so Sachen wie
    "er", "sie" und aehnliche Woerter bestimmt nicht mit drin haben moechtest?

    Ich habe das mal fuer eine Seite gemacht, die hat inzwischen 47065 Keywords
    und die Suchabfrage dauert keine Sekunde :-) Die ist genau so schnell
    aufgebaut, wie eine statische Seite :-))

    Gruss,
     Christian
     http://wwwtech.de

  2. Hi,

    eine suchmaschine soll bei einer gewissen anzahl von seiten eine volltextsuche durchführen.
    dieses durchsuchen braucht natürlich server-CPU zeit, und da stehen leider nur 6 Sekunden zur verfügung,

    Warum? Wer hat diesen Server-Timeout definiert?

    was nicht reicht, um alle seiten zu durchsuchen.

    Das kann passieren.
    http://www.teamone.de/cgi-local/self/such.pl braucht für eine Suche durch das vollständige Archiv auf dem neuen Server (welches übrigens ein ganz harmloser PC mit AMD K3/700 ist, kein Riesenhobel wie der vorherige) etwa 12 Sekunden, für ein Datenvolumen von 88,8 MB.
    Aber wenn Du Dir die Checkboxen auf der rechten Seite ansiehst, dann verstehst Du, mit welchem Konzept die Suchzeiten für 'normale' Suchvorgänge in den Griff zu bekommen sind: Durch inhaltliche Vorselektion des zu durchsuchenden Dokumentraums durch den Anwender selbst.

    nun meine frage: gibt es eine möglichkeit, dem perl script zu sagen, dass es eine pause einlegt, und erst ein paar sekunden später weitersucht, damit das script weitersucht, und nicht nach 6 sekunden abbricht?

    Das würde Dein Problem nicht lösen. Denn das Skript *bricht* bei Dir ja nach 6 Sekunden ab und pausiert nicht nur.

    weil nach einer neuen suchanfrage stehen ja wieder 6 sekunden zur verfügung. weiß jemand eine lösung?

    Wenn Du erreichen willst, daß ein erneuter Aufruf des Skripts *nicht* dasselbe tut wie der vorherige, dann muß das Skript irgendwie erkennen können, daß seine vorherige Operation noch nicht abgeschlossen ist. Also muß sich irgendwer auf dem Server gemerkt haben, in welcher Situation das Skript seine Arbeit unterbrochen hatte, und das Skript muß diese Information abfragen und vor allem an derselben Stelle weitermachen können.
    Zum "Speichern" dieser Information auf dem Server gibt es natürlich eine Menge Möglichkeiten (daemon-Prozeß, der im Hintergrund sucht und das CGI-Skript nur als Dialogfrontend, also eine Client-Server-Struktur; oder 'einfach' den Zustand in einer Datei abspeichern.
    Das "Merken" bringt aber eine Menge technischer Probleme mit sich: Die zu speichernde Information ist wahrscheinlich nicht ganz klein, und außerdem muß dieses Speichern auch dann funktionieren, wenn <n> Anwender das Skript *gleichzeitig* aufrufen, also irgendeine Art von Synchronisation etc.

    Summa summarum: Es lohnt sich wahrscheinlich nicht, diesen Weg weiter zu verfolgen.

    Dagegen lohnt es sich auf jeden Fall, Dein Suchverfahren zu überdenken, weil Du ja durch entsprechendes Tuning auf jeden Fall den Server entlastest.
    Und der scheint ja stark belastet zu sein, wenn er Dir nur Zeitscheiben von 6 Sekunden zur Verfügung stellen kann ...

    Viele Grüße
          Michael

  3. Danke für die schnelle antwort...

    wie mir scheint, ist das problem nicht so ganz leicht in den griff zu bekommen.

    @Christian Kruse
    das mit der indizierung wär `ne idee, die sich mal lohnen könnte auszuprobieren
    danke für den tip.. weil selbst war ich mal wieder zu blöd drauf zu kommen *g*
    muss ich halt mal das script umschreiben..

    @Michael Schröpl
    Deine skizzierte Methode (Daemon-Prozess) ist glaub ich wirklich etwas oversized  *g*
    und ich glaube auch nicht, dass sich der aufwand rentiert.
    Das script umschreiben, und tunen etc.  ist vielleicht noch was rauszuholen.. werd ich auch mal probieren...
    und die 6 sekunden.. die sind leider gottes vom webhoster vorgegeben.

    Wie auch immer.. danke für die schnelle antwort, ich werde mal beide wege (tuning und indizierung) weiterverfolgen, und ausprobieren.

    grüße

    Sorcerer

    1. Hi,

      das mit der indizierung wär `ne idee, die sich mal lohnen könnte auszuprobieren
      danke für den tip.. weil selbst war ich mal wieder zu blöd drauf zu kommen *g*
      muss ich halt mal das script umschreiben..

      wenn ich mich recht entsinne, dann stand in Deinem Ausgangsposting:

      eine suchmaschine soll bei einer gewissen anzahl von seiten
      eine volltextsuche durchführen.

      Was soll diese Suche exakt leisten?

      • Reicht eine Suche nach Schlüsselworten (dann ist Indizierung sicherlich
          eine deutliche Verbesserung), oder
      • brauchst Du die Möglichkeit für eine Phrasensuche (wie die Self-Such-
          maschine), dann wird es wesentlich schwieriger.

      Viele Grüße
            Michael