Was hat die beste Performance, wenn ein symbolischer Link nur dann erzeugt werden soll, wenn er nicht bereits existiert? Es geht um etwa 50.000 Links, die von Zeit zu Zeit aktualisiert werden sollen, d.h. beim 2. Lauf, kommen von den 50000 vielleicht 1000 dazu. Al -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am Samstag, 2. Juli 2011, 23:41:02 schrieb Al Bogner:
Was hat die beste Performance, wenn ein symbolischer Link nur dann erzeugt werden soll, wenn er nicht bereits existiert? Es geht um etwa 50.000 Links, die von Zeit zu Zeit aktualisiert werden sollen, d.h. beim 2. Lauf, kommen von den 50000 vielleicht 1000 dazu.
Al Ein auf der Zielmaschine optimiert kompiliertes C Programm vielleicht? Wenn Du genügend RAM frei hast, kann man da ganz schnelle DInge über Hash- Tabelle bauen...
Wie schnell ansonsten solche Dinge mit Scriptsprachen wie Perl oder gar Shell- Scripten wären, dürfte sehr davon abhängen, wie die Dateien verteilt sind... Gruß Martin -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am So, 03 Jul 2011 00:01:29 CEST schrieb Martin Hofius: Hallo Martin
Am Samstag, 2. Juli 2011, 23:41:02 schrieb Al Bogner:
Was hat die beste Performance, wenn ein symbolischer Link nur dann erzeugt werden soll, wenn er nicht bereits existiert? Es geht um etwa 50.000 Links, die von Zeit zu Zeit aktualisiert werden sollen, d.h. beim 2. Lauf, kommen von den 50000 vielleicht 1000 dazu.
Al Ein auf der Zielmaschine optimiert kompiliertes C Programm vielleicht? Wenn Du genügend RAM frei hast, kann man da ganz schnelle DInge über Hash- Tabelle bauen...
Wie schnell ansonsten solche Dinge mit Scriptsprachen wie Perl oder gar Shell- Scripten wären, dürfte sehr davon abhängen, wie die Dateien verteilt sind...
Es geht nur in erster Linie um eine andere Strukturierung der Ordner und Umbenennung der Dateinamen. Beispielhaft und stark vereinfacht ist es so: Original: Ordner 1 aaa aab ccd cce Link Ordner 1 Ordner A aaa aab Ordner C ccd cce Die Logik für die Umbenennung ist schon mit der Bash realisiert. Al -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, Am Sat, 02 Jul 2011, Al Bogner schrieb:
Was hat die beste Performance, wenn ein symbolischer Link nur dann erzeugt werden soll, wenn er nicht bereits existiert? Es geht um etwa 50.000 Links, die von Zeit zu Zeit aktualisiert werden sollen, d.h. beim 2. Lauf, kommen von den 50000 vielleicht 1000 dazu.
ln -si ... || : Oder was mit z.B. perl... -dnh -- Vi ist für Leute, deren Hände für Emacs zu klein sind. -- Florian Diesch -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am So, 03 Jul 2011 00:27:22 CEST schrieb David Haller: Hallo David,
Am Sat, 02 Jul 2011, Al Bogner schrieb:
Was hat die beste Performance, wenn ein symbolischer Link nur dann erzeugt werden soll, wenn er nicht bereits existiert? Es geht um etwa 50.000 Links, die von Zeit zu Zeit aktualisiert werden sollen, d.h. beim 2. Lauf, kommen von den 50000 vielleicht 1000 dazu.
ln -si ... || :
Also -i will ich nicht. Das Script soll möglichst schnell "durchrauschen". Ein einfaches ln -s ist in der Praxis auch akzeptabel, mich interessiert einfach nur, ob man das mit der Bash programmtechnisch deutlich beschleunigen kann. Al -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, Am Sun, 03 Jul 2011, Al Bogner schrieb:
Am So, 03 Jul 2011 00:27:22 CEST schrieb David Haller:
Am Sat, 02 Jul 2011, Al Bogner schrieb:
Was hat die beste Performance, wenn ein symbolischer Link nur dann erzeugt werden soll, wenn er nicht bereits existiert? Es geht um etwa 50.000 Links, die von Zeit zu Zeit aktualisiert werden sollen, d.h. beim 2. Lauf, kommen von den 50000 vielleicht 1000 dazu.
ln -si ... || :
Also -i will ich nicht. Das Script soll möglichst schnell "durchrauschen". Ein einfaches ln -s ist in der Praxis auch akzeptabel, mich interessiert einfach nur, ob man das mit der Bash programmtechnisch deutlich beschleunigen kann.
Hm. Wie schaut die Schleife aus? find ... -exec {} + ? Oder was anderes? test -h $file || ln -s source $file Da test ein builtin ist ... Mit perl könne es nochmal schneller sein, da perl direkt das Find machen kann und stat und ln dann intern direkt absetzen kann (als libc-call oder syscall), d.h. der Start von ln als externes Binary entfällt. Vgl.: $ i=0; time while test $i -lt 10000; do /bin/true; i=$((i+1)); done real 0m11.084s user 0m1.836s sys 0m2.712s $ i=0; time while test $i -lt 10000; do true; i=$((i+1)); done real 0m0.077s user 0m0.072s sys 0m0.004s Ok, der Zugriff auf's Dateisystem (symlink erstellen) dürfte das deutlich nivellieren, aber binary-starten bleibt langsamer als syscall. Ein 'find' könnte aber schon so bremsen, daß es irrelevant wird (zumindest wenn die Metadaten noch nicht im FS-Cache sind)[1]. Meld dich ggfs. per PM mit Details zum "drumrum" wenn du Hilfe beim Perlscript brauchst. HTH, -dnh [1] ich hab hier ein Indizier-Script, das ein find über nen großen Dateibaum jagt (~110k Dateien, meist größere), beim ersten Mal rödelt das minutenlang, beim zweiten Mal nur Sekunden dank ~3 GB Platz im RAM für FS-Cache/Buffers ;) $ time update-index real 5m23.731s $ time otr-update-index real 0m6.415s $ free total used [..] buffers cached Mem: 4054252 3969560 [..] 193684 3043808 -- "Tausche schwer verständliches Buch über Empfängnisverhütung gegen gebrauchten Kinderwagen..." [in de.soc.familie.kinder] -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am Mo, 04 Jul 2011 07:35:38 CEST schrieb David Haller: Hallo David,
Am Sun, 03 Jul 2011, Al Bogner schrieb:
Am So, 03 Jul 2011 00:27:22 CEST schrieb David Haller:
Am Sat, 02 Jul 2011, Al Bogner schrieb:
Was hat die beste Performance, wenn ein symbolischer Link nur dann erzeugt werden soll, wenn er nicht bereits existiert? Es geht um etwa 50.000 Links, die von Zeit zu Zeit aktualisiert werden sollen, d.h. beim 2. Lauf, kommen von den 50000 vielleicht 1000 dazu.
ln -si ... || :
Also -i will ich nicht. Das Script soll möglichst schnell "durchrauschen". Ein einfaches ln -s ist in der Praxis auch akzeptabel, mich interessiert einfach nur, ob man das mit der Bash programmtechnisch deutlich beschleunigen kann.
Hm.
Wie schaut die Schleife aus? find ... -exec {} + ? Oder was anderes?
test -h $file || ln -s source $file
so tragisch ist alles nicht, es war einfach eine Frage. Wenn eine Änderung nicht eine drastische Verbesserung bringt, dann bin ich für "never change a running system" Bis jetzt hatte ich: for INP in `find ... -type f -regex ".*169.*"`; do DIR=`echo "$INP" | cut -f4-5 -d"/"` DIR=`echo "$DIR" | cut -f1 -d"/"`"/"`echo "$DIR" | cut ... mkdir -p "$TARGETDIR""$DIR" NEWFILE="$TARGETDIR""$DIR""/"`basename ... ln -s "$INP" "$NEWFILE" done Wenn ich nichts falsch verstanden habe, dann bringt das "test" keine deutliche Verbesserung. Mit der Fehlermeldung sehe ich, wie weit die Schleife ist. Vermutlich wäre diese Konstruktion besser, aber obiges funktioniert für meine Dateien auch und jede Änderung kann ja Fehler erzeugen. Die Dateinamen haben keine Leerzeichen und keine Sonderzeichen. find "$ORIGINALDIR" -type f -regex ... | sort | while read -r FILE; do Al PS: Könntest du bitte kurz auf mein PM antworten. Hast du die Beispieldateien nun vom Server problemlos laden können? Kann ich sie löschen? -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
participants (3)
-
Al Bogner
-
David Haller
-
Martin Hofius