Mailinglist Archive: opensuse-de (871 mails)

< Previous Next >
Re: "find -exec grep" dauert Ewigkeiten
Am 18.06.2011 19:30, schrieb Sandy Drobic:
On 18.06.2011 16:59, Tao te Puh wrote:

Es ist die Lokalisierung !

Szenario: Ich habe mir ein Verzeichnis mit 4162 PDF-Dateien erzeugt (~1,3GB).
Darin suche ich mit grep:

time grep -i "hurz" /mnt/tmp_pdf/*

Das dauert 5m42.398s.

Dann stelle ich die Lokalisierung um auf C (das ist der Standard bei Tiny
Core
Linux):

export LANG=C
export LANGUAGE=C
export LC_ALL=C

und führe genau die gleiche Suche durch:

time grep -i "hurz" /mnt/tmp_pdf/*

Das dauert lediglich 0m7.566s.

Die Suche ist also 48x schneller.

Kann mir das jemand erklären?

Hast du vor dem zweiten Versuch auch den Rechner neu gestartet?
Wenn nicht, dann hast du deine Suche aus dem Cache bedient.
Versuche es doch mal anders herum: erst auf C umstellen (NACH Neustartt!!),
messen, dann auf UTF8 noch einmal messen.

Ich habe, innerhalb einer Sitzung, mehrfach gemessen. Dabei habe ich die
Lokalisierung auch mehrfach hin- und zurückgestellt. Die Ergebnisse differieren
minimal (-> Cache spielt hier also keine Rolle), der Unterschied zwischen den
Lokalisierungen, bleibt aber immens. Auch auf einem anderen System, dort läuft
11.2, habe ich diesen Effekt nachvollziehen können.

Interessant ist aber vielleicht das Folgende: Auf einem Alt-System mit SuSE
9.3, ist der Unterschied zwischen unterschiedliche Lokalisierung nur minimal,
also praktisch 0.

Ansonsten kannst Du das sehr einfach und schnell selber testen:

Folgende Kommandos erzeugen ein Verzeichnis (/mnt/tmp_nullfiles) und darin 1000
Dateien mit jeweils 1MB. Dann wird mit grep getestet, die Lokalisierung
gewechselt und erneut getestet:

mkdir /mnt/tmp_nullfiles

# 1000 Dateien mit jeweils 1MB anlegen
i=1; while [ $i -le 1000 ]; do dd if=/dev/zero
of=/mnt/tmp_nullfiles/nullfile-$i bs=1M count=1; i=$(( $i + 1 )); done;

# Test mit locale=de_DE.UTF-8
time grep -i "hurz" /mnt/tmp_nullfiles/*

# Lokalisierung wechseln
export LANG=C
export LANGUAGE=C
export LC_ALL=C

# Test mit locale=C
time grep -i "hurz" /mnt/tmp_nullfiles/*

# Lokalisierung wieder zurückstellen
export LANG=de_DE.UTF-8
export LANGUAGE=de_DE.UTF-8
export LC_ALL=de_DE.UTF-8


--

Herzliche Grüße
Tao

--
Um die Liste abzubestellen, schicken Sie eine Mail an:
opensuse-de+unsubscribe@xxxxxxxxxxxx
Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken
Sie eine Mail an: opensuse-de+help@xxxxxxxxxxxx

< Previous Next >
Follow Ups