php PDO 传输结果集到数据库
php PDO transfer resultset to database
我尝试将大量数据(每隔几分钟大约 20 万条记录)从一个数据库传输到另一个数据库(也在两个不同的服务器上)。两个表上的表模式都是两个 dbs 是相同的。
那么在不导致内存限制错误的情况下将巨大的结果集传输到数据库中的最佳方法是什么。
我目前的解决方案是这样的。但这意味着我 运行 在 writeToDB2()
中插入了大约 200k 个查询,这对我来说似乎不是很有效。
$stmt = $this->db_1->query("SELECT foo from bar");
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
writeToDB2($row);
}
有谁知道批量传输数据的更好解决方案吗?
幸运的是 mysql 支持 INSERT SELECT 跨数据库。
$stmt = $this->db_1->query("INSERT INTO db2.bar(foo) SELECT foo from db1.bar");
$stmt->execute();
另一个答案只有在同一用户可以访问两个数据库时才有效。
一个通用的解决方案是完全忘记 PHP 和 PDO 并使用控制台 mysql shell 和 mysqldump like
mysqldump -uuser1 -ppassword1 db1 tablename | mysql -uuser2 -ppassword2 db2
我尝试将大量数据(每隔几分钟大约 20 万条记录)从一个数据库传输到另一个数据库(也在两个不同的服务器上)。两个表上的表模式都是两个 dbs 是相同的。
那么在不导致内存限制错误的情况下将巨大的结果集传输到数据库中的最佳方法是什么。
我目前的解决方案是这样的。但这意味着我 运行 在 writeToDB2()
中插入了大约 200k 个查询,这对我来说似乎不是很有效。
$stmt = $this->db_1->query("SELECT foo from bar");
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
writeToDB2($row);
}
有谁知道批量传输数据的更好解决方案吗?
幸运的是 mysql 支持 INSERT SELECT 跨数据库。
$stmt = $this->db_1->query("INSERT INTO db2.bar(foo) SELECT foo from db1.bar");
$stmt->execute();
另一个答案只有在同一用户可以访问两个数据库时才有效。
一个通用的解决方案是完全忘记 PHP 和 PDO 并使用控制台 mysql shell 和 mysqldump like
mysqldump -uuser1 -ppassword1 db1 tablename | mysql -uuser2 -ppassword2 db2