Script zu langsam - Performancesteigerung möglich?

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von web4free, 23.06.2007.

  1. #1 web4free, 23.06.2007
    web4free

    web4free Jungspund

    Dabei seit:
    04.06.2007
    Beiträge:
    11
    Zustimmungen:
    0
    Hallo Leute,

    Shellscripting ist wirklich eine geile Sache, wenn man sich ein bisschen auskennt.

    Ich habe ein Script, welches einfach überflüssige Bilder in einen Verzeichnis ausforschen soll und diese ins Nirvana pfeffern soll.
    Damit ich das realisieren kann habe ich folgender Versuchung nicht wiederstehen können.

    Ich lese aus der MySQL Datenbank die Bildinfos aus - pro Datensatz 6 Bilder möglich.
    Diese Dateinamen schreibe ich in 2 txt-Files (1. Originalbild und 2. Thumbs) damits ein bisserl schneller geht.
    Dann lege ich einen neuen Ordner an und einen neuen Unterordner 'thumbs'.
    Ich gehe dann in einer Schleife das ganze txt-File durch und kopiere die Bilder vom Ursprungsordner in den neuen Ordner.
    Somit habe ich alle relevanten Bilder in diesen beiden neuen Ordnern.
    Alles andere im Originalordner wird dann rekursiv gelöscht.

    Ich denke das klingt doch recht vernünftig.
    Bei 500 oder 1000 Bildern vielleicht ja, aber ich habe bereits über 700.000 Bilder die relevant sind und dann noch ca. 150.000 die leider Schrott sind, weil die durch irgendwelchen Blödheiten nicht wirklich von PHP gelöscht wurden. Und es werden täglich mehr relevante Bilder.

    Naja und im jetztigen Zustand arbeitet das Shellscript gute 4 Stunden.
    Wenn, dann mache ich es eh nur in der Nacht wo der Server mehr Ruhe hat.
    Aber um 02:30h bekomme ich dann wieder neues Bildmaterial in Massen und da will ich eigendlich mit diesen Job fertig sein.
    Sprich mein Zeitfenster wäre gerade mal 2,5 Std.

    Gibt es da überhaupt eine Möglichkeit sowas zu beschleunigen.
    Mein Code ist sicher nicht von der Besten Kinderstube und ich habe (weil .sh nicht geht) diesen auch als Anhang dazugehängt.
    Seid bitte nicht zu streng mit mir - hier ist noch ein Greenhorn am werkeln....

    Vielen Dank
    lg.
    Werner
     

    Anhänge:

  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 web4free, 23.06.2007
    web4free

    web4free Jungspund

    Dabei seit:
    04.06.2007
    Beiträge:
    11
    Zustimmungen:
    0
    Ich hätte grad mal eine Idee gehabt, bin mir aber nicht sicher obs sinnvoll ist und wie es sich umsetzen ließe.

    Ich habe in einer txt-Datei jene Bildinfos aus der Datenbank die aktuell sind.
    Was, wenn ich noch ein txt-File mache mit allen Dateien aus dem Verzeichnis und dann beide txt-Files vergleichen lasse und jene Dateinamen welche in beiden txt-Files vorkommen herauslösche aus der 2. txt-Datei.
    Somit blieben ja nur noch jene Dateinamen über, die überflüssig sind und gelöscht werden könnten.
    Das sind ja bedeutend weniger, als über 700.000 Dateien erst zu kopieren um dann ein Verzeichnis rekursiv zu löschen und das neue Verzeichnis umzubenennen.

    Wenn das mehr Sinn macht - und es klingt danach - bräuchte ich nur eure Hilfe wie ich in einer Schleife die Dateinamen einlesen kann, beide txt-files vergleiche und die doppelten Einträge aus einen txt-File lösche.

    Knade! Aber ich bin für jede Hilfe dankbar!
    lg.
    Werner
     
  4. #3 Wolfgang, 24.06.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Sorry, ich habe mir dein Skript nicht angesehen.
    Aber ein paar Hinweise auf die Schnelle.
    Überleg dir, welcher Fall dominierend ist.
    1) Sind mehr Dateien zu löschen
    2) Sind mehr Dateien nicht zu löschen
    1) Such die Dateien raus und lösche den rest
    2) Erstell dir eine Löschliste
    Allgemein:
    Beachte, dass ein Kopiervorgang länger dauert als ein Löschvorgang.
    Ein Verzeichnis rekussiv zu löschen geht schneller, als die Dateien einzeln zu löschen.
    Vermeide es, zu viele Einzelprozesse aufzurufen, das kostet Performance.

    BTW Paste ein Skript doch mal hier rein und verwende dazu die [CODE] TAGS
    Will sagen:
    [CODE]
    hier dein Skriptinhalt
    [/CODE]

    Gruß Wolfgang
     
  5. #4 Ferchault, 25.06.2007
    Ferchault

    Ferchault Eroberer

    Dabei seit:
    19.06.2007
    Beiträge:
    61
    Zustimmungen:
    0
    Ort:
    localhost
    anderer Ansatz: MySQL eine Liste aller Bilder erstellen und sortieren lassen und z.b. via SELECT INTO OUTFILE abspeichern. Dann ein find [...] | sort -u. Die beiden Dateien dann mit comm vergleichen und nur die überflüssigen Dateien löschen.

    Das setzt natürlich voraus, dass aus den in der Datenbank referenzierten Bildern mithilfe eines SQL-Befehls die relevanten gefiltert werden können.

    hth
     
  6. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
Thema:

Script zu langsam - Performancesteigerung möglich?

Die Seite wird geladen...

Script zu langsam - Performancesteigerung möglich? - Ähnliche Themen

  1. Bräuchte Hilfe bei Backupscript mittels Bash und cronjob

    Bräuchte Hilfe bei Backupscript mittels Bash und cronjob: Es soll für bestimmte Ordner Archivierung aller Dateien(Logfiles), die älter als 30 Tage sind machen. Am besten einmal täglich nachts irgendwann....
  2. Bashscript aus Debian6 läuft nicht auf Debian7

    Bashscript aus Debian6 läuft nicht auf Debian7: Hallo an alle, nachdem ich ein Skript von squeeze auf wheezy kopiert habe und ausführte, erschienen gleich wilde Fehlermeldungen, nach denen ich...
  3. Shell Script Problem

    Shell Script Problem: Hallo zusammen, ich arbeite momentan mit einem Plagiat Tool, die ich über Git Bash ausführe. Es wird im Endeffekt ein Link generiert, die ich...
  4. Externes Programm mit Script ausführen?

    Externes Programm mit Script ausführen?: Hallo, ich würde gern ein Script zum klonen von festplatten schreiben z.B. mit dem Programm Mondo Rescue. Ist es möglich externen Programmen...
  5. sh Script zum Autostart

    sh Script zum Autostart: hallo liebe Mitglieder, wenn ich unter Linux eins meiner Shell Skripte im Autostart haben will nutze ich immer die @reboot Funktion im crontab....