Parallele Ausführung des Bash-Skripts


7

Ich habe eine Tabelle URL_Experimentin meiner Datenbank ( mySQL-Datenbank ). Ich habe 2 Millionen URL-Links in dieser Tabelle.

Für jede URL überprüfe ich, ob ein bestimmter Text in der URL vorhanden ist, und aktualisiere die Informationen wieder in meiner URL_ExperimentTabelle.

Jetzt muss ich das Skript schnell laufen lassen. Die einfache Lösung, die mir in den Sinn kommt, ist:

Teilen Sie die URL_Experimentin 10 Tabellen (jeweils mit 200.000 Zeilen) auf und führen Sie das Skript 10 Mal gleichzeitig aus. Auf diese Weise kann ich sicherstellen, dass die Aktualisierungen ordnungsgemäß durchgeführt werden. Dafür muss ich jedoch 10 Skripte speichern, die jeweils auf die richtige Tabelle zugreifen (ich muss die Tabellen von 1 auf 10 umbenennen).

Obwohl das oben Genannte eine ziemlich nette Lösung zu sein scheint, suche ich nach einer anspruchsvolleren Lösung. Etwas, das dasselbe Skript gleichzeitig (parallel) wie 10 Prozesse ausführt. Mein Anliegen ist die Ausführungszeit. Ich möchte nicht, dass die Ressourcen verschwendet werden, wenn sie genutzt werden können.


Nein Sir. Wenn es sich um ein Spam-System handelt, habe ich möglicherweise meine ursprüngliche Identität nicht preisgegeben. Es hängt mit meiner Forschungsarbeit zusammen. Ich hatte den gesamten Code mit Excel VBA erstellt. Bei größeren Datenmengen ist dies jedoch fehlgeschlagen, und ich schreibe den gesamten Code in Bash-Skript neu. Wenn Sie meine SO-Fragen sehen, beziehen sich die meisten nur auf die Datenextraktion in VBA.
Ramesh

1
Ich bin froh, dass ich auf meine Fragen aufmerksam werde :) Ich lerne in diesen Tagen wirklich viel, nachdem ich angefangen habe, den Code im Skript neu zu schreiben. Ich werde alle diese Links in meiner These Verteidigung erwähnen :)
Ramesh

Füllen Sie die MySQL-Datenbank aus oder ist dies die Quelle der URLs, die Sie erhalten? Ich frage b / c, ob ich geneigt bin, SQLite anstelle von MySQL zu verwenden. Übrigens, was ist Ihr übergeordnetes Ziel für Ihr Projekt?
slm

Ich generiere die URLs basierend auf den Namen, die ich von einer anderen Quelle erhalte. Ich weiß, dass die Website immer einem bestimmten Muster folgt, und überprüfe daher, ob diese URLs vorhanden sind. Wenn sie vorhanden sind, extrahiere ich die Informationen aus diesen URLs und speichere sie in meinen MySQL-Datenbanktabellen.
Ramesh

Wie war die Leistung bei der Erstellung der MySQL-Datenbank? Bei diesem Zeilenvolumen wird Sie das Design der Architektur oft beißen, wenn Sie keine besondere Aufmerksamkeit zahlen. dazu zunächst: stackoverflow.com/questions/1711631/…
slm

Antworten:


6

Sie können GNU parallel ausprobieren. Viele Beispiele finden Sie hier und hier .

Ich bin Mitglied des Swift- Teams und wir machen genau diese Dinge für große Forschungsprojekte.


Vielen Dank für den Vorschlag. Wenn ich GNU parallel verwenden muss, muss ich das Skript ändern oder so? Muss ich Konfigurationsänderungen vornehmen?
Ramesh

Ketan bot an, ihn direkt zu kontaktieren, wenn Sie Hilfe beim Einrichten von Swift benötigen, und dies in die Kommentare zu verschieben, was nicht wirklich Teil der Antwort ist: "Sie können mich gerne kontaktieren, wenn Sie Swift für Ihr Problem einrichten möchten."
slm

3
Parallel scheint das Beste für die Aufgabe zu sein, speziell würde ich so etwas tunmysql -e 'select ...' | parallel --pipe -j10 --round-robin ./scriptname.sh
Patrick
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.