Anzeige grosser Ergebnismengen unter Avanti
Thomas Berger
ThB.com at t-online.de
Sa Mai 27 20:26:58 CEST 2000
Lieber Herr Hoeppner,
am 24. Mai antworteten Sie Herrn von Davier:
> > ich habe bei dem Versuch unter Avanti (acwww25-Schnittstelle) Registereintraege, hinter denen sich mehr als ca. 160 Datensaetze verbergen, anzuzeigen, weder eine Anzeige dieser, noch eine Fehlermeldung.
> > Der Versuch die Schleifendurchlaeufe im Script fuer den Find-Befehl zu erhoehen brachte nur eine Steigerung von 150 auf 160 Datensaetzen. Die Kurztitelanzeige funktioniert dagegen.
> > Gibt es vielleicht noch eine weitere Moeglichkeit den Cache fuer die Ergebnismenge zu vergroessern?
> > Der Avanti-Server laeuft auf MS Windows NT 4.0 Server (SP6a) und IIS.
>
> welche Meldung zeigt denn avanti? Die Schleife mit dem Findbefehl
> hat damit sicherlichts zu tun, denn die Ergebnismenge (=Anzahl der
> Satznummern) ist auf ca. 32000 eingestellt und sollte nicht das
> Problem sein. Das Result-Memory (=Speicher für das aufbereitete
> Ergebnis) ist nur scheinbar begrenzt: Es ist eine Sempahore, die
> bei Bedarf mehrmals gefüllt und geleert wird. Wenn avanti mit
> Exception Error abbrechen sollte, so liegt ein Speicherüberlauf vor,
> den man sich allerdings u.U. auch selber parametrieren kann:
> Wenn man Anwendervariablen nicht korrekt löscht, so dass ihr
> Inhalt in das uferlose wächst oder wenn beim massenhaften
> nachladen nicht korrekt zurückgeschaltet wird.
>
> Weitere Fehlermöglichkeit: Timeouts des Browsers oder des
> Servers. Fast jeder Server wartet nur eine endliche Zeit auf das
> Ende eines Scriptes. Wenn nichts kommt, wird der entsprechende
> Prozess gekillt. Das kann man selber einstellen. Wenn der Browser
> lange Zeit nichts bekommt, bricht er ebenfalls ab. Das kann man nur
> am eigenen Browser einstellen, wenn überhaupt.
Wichtige Fehlermoeglichkeit:
Timeout des Avanti-Servers (bei mir etwa bei
Download von 20000 Saetzen).
Besonders aergerlich: Der Avanti-Prozess bricht
zwar den Download ab, schliesst aber nicht die
Socket-Verbindung: Der Client haengt also auf
alle Ewigkeit (auch wenn Web-Server und Browser
evtl. eigene Timeouts haben: Ein Perl-CGI bleibt
leben und wartet und wartet), und blockiert
Speicher. Was tendenziell die Antwortzeiten
verschlechtert, mehr Timeouts entstehen etc.
Plausibelste Fehlermoeglichkeit: acwww25 erzeugt Links
auf die Anzeige hinter den Registerbegriffen, d.h.
die eingesetzte Methode ist HTTP GET und die
aufzusuchenden Satznummern sind in die URL
hineincodiert (mit Kommas getrennt). Wenn ich mich recht
entsinne, ist hier in der CGI-Spezifikation nur gesagt,
dass mindestens 1024 Zeichen fuer URLs unterstuetzt
werden sollen. Ein Webserver, an den ich mich
entsinne (XITAMI? Ohttpd?) macht es sich besonders einfach
und nimmt einfach die Groesse des unter DOS
verfuegbaren Environments, das kann manchmal
scheusslich wenig sein. Jedenfalls wuerde eine
1024er-Grenze eine Beschraenkung der Vollanzeige
auf 150-160 Saetze plausibel machen (bei meist
5stelligen Satznummern).
Abhilfe also nur, indem dafuer gesorgt wird, bei
mehr als 100 Treffern nicht die Saetze explizit
zu zeigen, sondern eine neue Suche mit exakt
der Indexzeile als Suchbegriff abzusetzen.
Blaettern in Ergebnismengen etc. ist davon nicht
betroffen: Hier werden HTML-FORMS mit method="POST"
benutzt: Bei dieser Methode gibt es a priori keine
Beschraenkungen fuer die Menge der uebertragbaren
Information.
Alternativ koennen Sie also auch ein unsichtbares
Formular fuer jede Registerzeile aufbauen und
mithilfe von JavaScript dafuer sorgen, dass beim
Klicken auf den Link die Informationen des Formulars
abgeschickt werden. Das ist aber nicht besonders
effizient, weil endlos viele Satznummern von Avanti
ermittelt werden muessen (auch hier gibt es ja
eine mit qrix m einstellbare Obergrenze, die die
Performance erhoeht), an das CGI-Skript uebertragen
werden muessen, an den Web-Client uebertragen werden
und der schickt alle den ganzen Weg wieder zurueck:
Da ist es wirklich effizienter, oberhalb einer
gewissen, vermutlich ziemlich niedrigen, Zahl eine
find-Recherche zu machen.
viele Gruesse
Thomas Berger
Mehr Informationen über die Mailingliste Allegro