用PHP实现数组中的批处理
我在从xml解析的数组中获得了数千个数据。。我关心的是我的脚本的处理时间,它是否会影响我的脚本的处理时间,因为我有十万条记录要插入到数据库中?有没有一种方法可以批量处理向数据库中插入的数据?这不太可能影响处理时间,但您需要确保数据库的事务日志足够大,可以为100k行构建回滚段。语法是:用PHP实现数组中的批处理,php,arrays,Php,Arrays,我在从xml解析的数组中获得了数千个数据。。我关心的是我的脚本的处理时间,它是否会影响我的脚本的处理时间,因为我有十万条记录要插入到数据库中?有没有一种方法可以批量处理向数据库中插入的数据?这不太可能影响处理时间,但您需要确保数据库的事务日志足够大,可以为100k行构建回滚段。语法是: INSERT INTO tablename (fld1, fld2) VALUES (val1, val2), (val3, val4)... ; 所以你可以写smth。像这样(虚拟示例): 这在大型数据集上运
INSERT INTO tablename (fld1, fld2) VALUES (val1, val2), (val3, val4)... ;
所以你可以写smth。像这样(虚拟示例):
这在大型数据集上运行非常快,如果数据集适合内存,则不必担心性能。这是针对SQL文件的,但您可以遵循它的模型(如果不只是使用它的话)—— 它将文件拆分为您可以指定的部分,例如3000行,然后以<1秒到1分钟或更长的时间间隔插入它们 这样,一个大文件就会被分解成更小的插入文件等 这将有助于绕过编辑php服务器配置和担心内存限制等问题,如脚本执行时间等 新用户无法插入链接,因此谷歌搜索“sql大转储”,或者如果这样做有效,转到: www[dot]ozerov[dot]de[slash]bigdump[dot]php 因此,从理论上讲,您甚至可以修改上述脚本,以接受数组作为数据源,而不是SQl文件。这显然需要一些修改 希望能有帮助。 -R或使用ADOdb包装器():
你想过数组块吗?它在另一个项目中对我有效
谢谢大家的建议!我真的很感激,我会尝试做一个与大转储相同的代码概念,或者只是修改它。。再次感谢!
foreach ($data AS $key=>$value)
{
$data[$key] = "($value[0], $value[1])";
}
$query = "INSERT INTO tablename (fld1, fld2) VALUES ".implode(',', $data);
// assuming you have your data in a form like this:
$params = array(
array("key1","val1"),
array("key2","val2"),
array("key3","val3"),
// etc...
);
// you can do this:
$sql = "INSERT INTO `tablename` (`key`,`val`) VALUES ( ?, ? )";
$db->Execute( $sql, $params );