PHP从mysql迭代巨大的数组

时间:2015-02-12 15:59:57

标签: php mysql arrayiterator

我正在处理客户端的大型数据库移动。我们有一个查询,它会提取大量数据,需要处理这些数据,然后插入到另一个表中。原始查询是将多个表连接在一起以获得所需格式的组合。

我们使用自己的数据库类来放置查询的整个结果(大约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; 
    }

}

任何逐渐放缓的想法?有关提高效率的建议吗?

0 个答案:

没有答案