私は、リモート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
}
}
mysqlndの非同期APIは非常に実験的なようです。あなたが* NIXを使っているなら、おそらくもっと簡単です。 – netcoder