2012-03-31 16 views
0

Ich habe ein einfaches Skript, das etwa 100 Millionen Ergebnisse abruft, 1 Million auf einmal von einem entfernten MySQL-Server und aktualisiert meine lokale Datenbank. Der Remote-Server ist nicht unter meiner Kontrolle, so dass eine Art Master/Slave-Setup für automatische Updates nicht möglich ist. Es dauert ein paar Stunden, normal auszuführen, aber ich erkannte, dass der Teil des Codes, der die Ergebnisse von dem Remote-Server abruft, und der Teil des Codes, der die lokalen Einträge aktualisiert, etwa die gleiche Zeit für die Ausführung benötigen. Also, theoretisch könnte ich die Ausführungszeit fast halbieren, wenn ich den nächsten Satz Zeilen vom Remote-Server abrufe, während ich die lokalen Einträge aktualisiere. Ich habe einen Beispielcode für parallele Datenbankabfragen in PHP gesehen (zum Beispiel die Frage 322275), aber ich kann mir keinen Weg vorstellen, wie ich mit der foreach-Update-Schleife in meinem Skript arbeiten kann. Ist das in PHP möglich oder wäre ich besser dran wäre das eine andere Sprache wie Python oder Ruby (obwohl ich keine Erfahrung mit beiden habe)?Abhängige Datenbankabfragen parallel ausführen

Bearbeiten: Auch der Remote-Server ist auf halbem Weg um die Welt, so dass die Netzwerklatenz ziemlich hoch ist.

Beispielcode:

for ($i = 0; $i < 100; $i++) 
{ 
    $min = $i * LIMIT; 
    $max = ($i + 1) * LIMIT; 

    $updates = $db_remote->fetchAll("SELECT * FROM table_name WHERE content_id >= $min AND content_id < $max"); // Pull 1 million results from the remote SQL server 

    foreach ($updates as $u) 
    { 
     $db_local->update("UPDATE table_name SET ... WHERE content_id = $u['content_id'] LIMIT 1"); // Update each of the local entries 
    } 
} 
+0

Die async-API für mysqlnd scheint sehr experimentell zu sein. Wenn Sie auf * NIX sind, nur Gabel, ist es wahrscheinlich viel einfacher. – netcoder

Antwort

Verwandte Themen