zend-framework - 迭代行集时内存不足

标签 zend-framework memory-management zend-db

我有一个包含 60400 行邮政编码数据的“小”表,总共 6mb。我想遍历所有这些,更新列值,然后保存它。

以下是我的 Zipcodes 模型的一部分,它扩展了 My_Db_Table 的 TotalRows 函数 - 您猜对了..返回表中的总行数(60400 行)

public function normalizeTable() {
    $this->getAdapter()->setProfiler(false);

    $totalRows = $this->totalRows();        
    $rowsPerQuery = 5;

    for($i = 0; $i < $totalRows; $i = $i + $rowsPerQuery) {
        $select = $this->select()->limit($i, $rowsPerQuery);

        $rowset = $this->fetchAll($select);
        foreach ($rowset as $row) {
            $row->{self::$normalCityColumn} = $row->normalize($row->{self::$cityColumn});
            $row->save();
        }
        unset($rowset);
    }
}

我的 rowClass 包含一个规范化函数(基本上是一个变音位包装器,做了一些额外的魔法)。

起初我尝试了一个普通的旧 $this->fetchAll(),但立即出现内存不足(128MB)的情况。然后我尝试将行集分割成 block ,唯一的区别是某些行实际上得到了更新。但仍然出现内存不足错误。

关于如何完成此任务的任何想法,或者我应该回退到ye'olde mysql_query()

最佳答案

我建议在这里使用 Zend_Db_Statement::fetch() 函数。

http://files.zend.com/help/Zend-Framework/zend.db.statement.html

关于zend-framework - 迭代行集时内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2945535/

相关文章:

php - 使用 Zend_Form_Element_Select 时访问 InArray 验证器的自定义错误消息

php - 在执行 UNION 查询时,如何让 Zend Db 返回行集而不是数组?

php - 最好的 PHP 错误类

php - 构建 SQL 选择更好的方法? (甲骨文)

Python 在并行处理大文件时不释放 RAM

memory-management - 程序存储器的未初始化数据段

c - 是否需要释放用于函数返回变量的内存 (C)?

php - 使用zend的Mysql删除查询

mysql - 在 zend 中使用动态数据更新查询?

php - 如何使用 Zend_Db 有效地读取大量行?