Warum ist das Vergleichen von 1250 Zeichenfolgen mit 90.000 Mustern so langsam?

12

Meine Zeichenfolgen sind Dateipfade wie s/14/11/13/15/n7ce49B_235_25ed2d70.jpg; meine muster sind ganz einfach, alle mögen n7ce49B_.+.

Ich arbeite GNU grep 2.6.3unter Debian 6.0.10 auf einem Dell DL360G7- Server (ich erwähne es nur, um einen Eindruck von dieser Maschinenleistung zu bekommen) mit 15-k-Festplatten und dem folgenden Befehl: time LC_ALL=C grep -E -f path_to_patterns_file path_to_strings_fileKann einfach nicht ausgeführt werden - Server-Auslagerungen sind zu schlecht. Bei 20.000 Mustern dauert es mehr als 3 Stunden.

Das erscheint mir unvernünftig.

Per Kommentaranfrage gibt es die Dateien: Dateipfade 20k Muster

Man kann auch die Anzahl der Eingabezeilen und -muster testen und anpassen mit:

xxd -p /dev/urandom | fold -sw 100 | head -n 1250 |
  grep -Ef <(xxd -p /dev/urandom | fold -sw 10 | head -n 20000)
Skaurus
quelle
3
Ihr Titel hat 90k, hat die Beschreibung 20KMuster
RomanPerekhrest
2
Nun, 90k ist meine ursprüngliche Eingabegröße und das macht meinen Maschinentausch so schwierig, dass ich dieses Grep töten muss. Dann habe ich versucht, dies in 20k-Dateien aufzuteilen und es funktioniert immer noch schrecklich ... Aber Sie haben Recht, dass meine Beschreibung inkonsistent ist.
Skaurus
2
Bitte klären Sie, ob der Server während des Tests möglicherweise überfordert war (und einige andere ressourcenintensive Aufgaben ausgeführt hat) grep.
Agc
2
Man kann mit reproduzieren xxd -p /dev/urandom | fold -sw 100 | head -n 1250 | grep -Ef <(xxd -p /dev/urandom | fold -sw 10 | head -n 20000). Es sieht so aus, als würde die Zeit für das Kompilieren der regulären Ausdrücke und das Zuweisen von viel Speicher aufgewendet. Mit -Fanstelle von -Eist es augenblicklich.
Stéphane Chazelas
2
Im Übrigen ist das nicht n7ce49B_.+gleichbedeutend mitn7ce49B_.
Stéphane Chazelas

Antworten: