linux-l: perl und schnelle Suche

Ulrich Wiederhold U.Wiederhold at gmx.net
So Jun 17 23:53:04 CEST 2001


Hallo,
* Oliver Bandel <oliver at first.in-berlin.de> [010617 21:57]:
> Ich dachte, es geht darum, einen String in einer
> Datei ausfindig zu machen.

Exakt. Konkretes Beispiel ist:
Ich habe eine Datei in der alle meine mp3-songs stehen, also z.B.
Miles_Davis_filenaMe_1
Miles Davis filename 2
MiLes_Davis FilEname 3

Wenn jetzt jemand nach Davis oder Miles oder Miles Davis oder
Miles_DaVis sucht, sollen alle 3 files als Ergebnis ausgegeben werden.

Wenn jemand nach filename 2 oder filenAME_2 sucht, soll nur "Miles Davis
filename 2" ausgegeben werden.

Noch besser wäre es, wenn bei "Miles*filename 2" nur Zeile 2 augegeben
würde.

> Wozu oder was willst du denn im Hash ablegen?
> Wenn der Match erfolgreich ist, dann ist der
> String in der Datei vorhanden => Dann kann man
> sich die jeweilige Zeile ausgeben, wie es halt
> mit grep sonst auch gemacht wird.
Yep.

> Warum denn erst alles in ein hash ballern
> und später wieder ausgeben?
> Und warum, wenn es zwischengespeichert werden soll,
> nicht einfach in ein Array ablegen?
> Ist schneller als ein hash.

Ich dachte immer, ein hash wäre in dem Fall schneller als ein Array!?
Zumindestens bei linearer Suche, was anderes ist mir beim Array nicht
eingefallen.
Meine beste Lösung war bisher, mittels 'grep -e' direkt in der Datei zu
suchen, also ohne Perl.

Problem ist in erster Linie die Performance, die bei >3 Anfragen pro
Sekunde einfach zu schlecht wird (Suche in > 20000 files sollte möglich
sein), wenn man in mehreren Channels mit >700 Leuten ist.

Gruß
Uli

-- 
Ulrich Wiederhold
Clarenbachstraße 1
50931 Köln
phone +49-221-2766619



Mehr Informationen über die Mailingliste linux-l