SELECT all from MYSQL DATABASE_1
几乎每个项目编辑的最佳方法是什么(拆分,合并,验证电子邮件格式,验证网址格式等) - 使用php然后INSERT INTO
新{{1} }。
旧表有近300万行。
如果我为每一行做 foreach (这不是一个好主意:))2千行需要1小时以上。
如果我在一个查询中插入多行:
DATABASE 2
几乎相同
如何以专业和快速的方式做到这一点?
答案 0 :(得分:0)
你可以分页查询并使用几个php进程。例如,一个进程检索并编辑插入新DB的100000个元素。
要实现它,您可以创建一个php父进程,将工作负载分配到子进程中,如下所示:
$total_rows = //Get from your mysql table
$offsets = []
$limit = 10000;
//Create offsets to process in bulk
for ($i=0 ; $i<$total_rows ; $i++) {
$offsets[] = ($i * limit);
}
//Process rows
while ($processed_rows < $total_rows)
$pids = [];
//Create 10 childs processes
for ($i=0;$i<10;$i++) {
if ($pid) {
$pids[] = $pid;
} else {
//Get next offset to process
$offset = array_shift ($offsets);
process_and_insert_row($offset, $limit); //this function gets, edits and inserts items
}
}
//Wait for childs to finish
foreach ($pids as $pid) {
pcntl_waitpid($pid, $status);
$processed_rows += $limit;
unset($pids[$pid]);
}
}
警告:代码未经过测试,但我认为它证明了解释背后的想法......