并行执行从属数据库查询

时间:2012-03-31 20:40:39

标签: php mysql parallel-processing

我有一个简单的脚本,可以从远程MySQL服务器中获取大约1亿个结果,一次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
    }
}

1 个答案:

答案 0 :(得分:0)

您可能需要查看http://php.net/manual/en/function.pcntl-fork.php

如果您的远程查询已完成,您可以开始更新数据库并分叉您的进程,以便开始获取下一组数据。

相关问题