【问题标题】:CodeIgniter - result_array in memoryCodeIgniter - 内存中的结果数组
【发布时间】:2018-02-17 05:58:39
【问题描述】:

我不知道这是否是一个有效的编程问题。但是对于 CodeIgniter,我有些担心。希望有多年经验和智慧的各位大侠指导一下。

这是我的故事,

我正在为一个项目使用 CodeIgniter 和 MS SQL。我正在检索超过 20M 行的销售数据。现在,我设法通过创建聚合数据并存储在表中来减少结果。我仍然得到内存不足的错误。

现在,我在想,CodeIgniter 的 result_array() 函数是否将所有结果存储到内存中?我对这个假设是否正确?

如果是,我可以分块加载它吗?假设我在内存中加载前 100 行,然后删除那 100 行,然后再加载 100 行?所以 PHP 不会用结果填满我的记忆。

顺便说一句,我已经使用寻呼机来获取详细数据。出于特定目的需要这个问题。我想显示一份摘要报告。我正在使用jQwidgets Pivot Grid

我不知道这是否有意义。但这就是我的想法。我想了解发生了什么。或者,也许您可​​以建议我可以使用哪些其他选项或设计来处理 PHP 中的大数据。

希望我能清楚地解释自己。非常感谢。我会很感激你的所有建议。

【问题讨论】:

    标签: php codeigniter


    【解决方案1】:

    相信你正在寻找鲜为人知的unbuffered_row函数:

    $query = $this->db->query("YOUR QUERY");
    
    while ($row = $query->unbuffered_row())
    {
            echo $row->title;
            echo $row->name;
            echo $row->body;
    }
    

    此方法返回单个结果行而不预取整个结果 像 row() 一样导致内存。如果您的查询不止一行, 它返回当前行并将内部数据指针向前移动。

    https://www.codeigniter.com/userguide3/database/results.html

    你也可以得到一个数组:

    $query->unbuffered_row('array');        // associative array
    

    【讨论】:

    • 嗨@Alex,感谢您的回复。我会看看并尝试让它在我的项目中工作。一旦我有发现,我会进行更新。谢谢!
    猜你喜欢
    • 2021-12-30
    • 1970-01-01
    • 2013-02-21
    • 2014-09-14
    • 2012-02-29
    • 1970-01-01
    • 2015-12-16
    • 2012-09-14
    • 1970-01-01
    相关资源
    最近更新 更多