处理大文件+ pgsql表的最佳逻辑

时间:2018-05-27 15:48:56

标签: php postgresql file

我有一个带有多个模式的postgres数据库,每个模式都有多个表,每个表有几百万行。

我不得不下载一个包含几百万行的文件,并将每一行与所有表中的每一行进行比较,如果找到该行,我必须更新它中的一列。

我尝试的第一件事就是逐行读取文件,在每个模式的每个表上运行一个select查询,如果找到行我运行更新,它在我的测试平台上运行良好,但实际上数据库,它将永远运行,因为它每秒执行大约1000次查询(我查看了查询:SELECT xact_commit+xact_rollback FROM pg_stat_database WHERE datname = 'mailtng_lists';)。

我尝试的第二件事是将主脚本与连接到数据库的脚本分开,所以我所做的是将大块文件分成块,每个块有100K行,然后调用脚本来执行使用以下命令连接X次:

foreach($chunks as $chunk) //$chunks is the result of the split command (no problem here)
{
    exec("updater.php $chunk");
}

但它根本没有任何改进,每秒查询的数量仍然非常低,所以我尝试的最后一件事是做同样的但是使用shell_exec所以脚本不必等待输出,但是服务器崩溃,因为我有173个块,所以它导致调用173个php实例。

关于如何处理这种情况的任何想法?

0 个答案:

没有答案