2012-03-31 8 views
0

私は、リモートMySQLサーバから一度に100万件の結果を取得し、ローカルデータベースを更新する簡単なスクリプトを用意しています。リモートサーバは私の制御下にはないので、自動更新のための何らかの種類のマスタ/スレーブ設定は不可能です。正常に実行するには数時間かかりますが、リモートサーバーの結果とローカルエントリを更新するコードの部分を実行するコードの部分は、実行におおよそ同じ時間がかかります。理論的には、ローカルエントリを更新している間に、リモートサーバから次のバッチの行をフェッチすると、実行時間がほぼ半分になる可能性があります。私はPHPでの並列データベースクエリのためのいくつかのコード例を見てきましたが(例えば、質問322275)、スクリプト内のforeach更新ループで動作させる方法は考えられません。これはPHPで可能ですか、これをやる方が良いのはPythonやRubyのような別の言語です(どちらも経験はありませんが)?パラレルで依存データベースクエリを実行する

編集:ネットワーク待ち時間がかなり高いですので、また、リモート・サーバーは、世界中の半分の方法です。

サンプルコード:

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

mysqlndの非同期APIは非常に実験的なようです。あなたが* NIXを使っているなら、おそらくもっと簡単です。 – netcoder

答えて

0

あなたのリモートクエリが完了した場合、あなたはあなたのデータベースの更新を開始し、次の一連のフェッチを開始するために、あなたのプロセスをフォークすることができますhttp://php.net/manual/en/function.pcntl-fork.php

をチェックアウトする場合がありますデータ。

関連する問題