我正在处理客户端的大型数据库移动。我们有一个查询,它会提取大量数据,需要处理这些数据,然后插入到另一个表中。原始查询是将多个表连接在一起以获得所需格式的组合。
我们使用自己的数据库类来放置查询的整个结果(大约600,000行,其中30列数据主要是字符串)。此数组被传递到另一个类(扩展ArrayIterator)以进行一些操作,然后插入到目标数据库表中。
发现的是它可以很好地处理小数据集并且速度快。但随着超过五十万行的导入,它似乎越来越慢。我们已经计算了使用处理过去进口所花费的时间的估计时间,但似乎估计过去3小时下雨2小时。
最初它每秒处理一百个左右,现在只有2-3个。
这是我们代码的一个例子:
$sql = "some query";
$array = new Import($sql);
foreach($array as $data){
$db->insert('table', $data);
}
我们的迭代器类的演示:
class Import extends ArrayIterator {
public function __construct($sql){
//database class parses query and returns all the results into an array
$array = $db->getArray($sql)
parent::__construct($array);
}
public function current() {
$data = parent::current();
//come data processing...
return $data;
}
}
任何逐渐放缓的想法?有关提高效率的建议吗?