0

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

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

}

对逐渐放缓有什么想法吗?有什么提高效率的建议吗?

4

0 回答 0