【问题标题】:How much data is too much for PDO fetchAll()PDO fetchAll() 多少数据太多
【发布时间】:2013-06-09 00:26:01
【问题描述】:

我在这里搜索过,但使用我能想到的搜索词找不到任何东西。这里可能有另一个帖子可以回答我的问题,但我没有找到。

PHP 手册指出:

使用此方法获取大型结果集将导致 对系统和可能的网络资源的需求。

它还继续说您应该使用 WHERE 和 ORDER BY 来减轻负载,这非常有意义。但这仍然没有回答问题,多少才算太多?如何定义一个太大的结果集?

例如,我为我正在创建的一个类编写了这段代码:

public function getQuestions($quiz_id){
        $quiz_id = parent::onlyNums($quiz_id);
        $stmt = $this->db->prepare(
                        "SELECT quiz.title, quiz.description, questions.question,
                         questions.answer, questions.wrong_one, questions.wrong_two,
                         questions.wrong_three FROM quiz, questions WHERE 
                         questions.quiz_id = :quiz_id AND quiz.id = questions.quiz_id");
                $stmt->bindValue(':quiz_id',$quiz_id,PDO::PARAM_INT);
                try
                {
                    $stmt->execute();
                    if($stmt->rowCount() > 0 )
                    {
                        return $stmt->fetchAll(PDO::FETCH_ASSOC);
                    }else{
                        echo "No Items match the query";
                        exit();

                    }
                }
                catch(PDOException $e)
                {
                    return $e->getMessage();
                }
    }

现在,对于我正在构建的应用程序,我不希望此查询检索大量结果,因为由于应用程序的性质,永远不会有那么多结果。但在某些时候,如果有人发疯了,在一次测验中添加了数百万个问题,这个脚本会失败吗?

感谢您提供任何信息或建议。

【问题讨论】:

  • 这都是关于内存设置的,尝试暴力破解你的应用程序,很快你就会看到 PHP 抱怨内存不足。只有这样您才能计算出您案例的大约最大记录数

标签: php oop pdo resultset fetchall


【解决方案1】:

我不认为有太多的固定大小。这实际上取决于您正在运行的硬件/网络。与使用小型 EC2 实例相比,您将能够在具有 100GB RAM 的专用服务器上处理更大的数据集。但是,您应该始终努力使查询尽可能高效,并且只返回当前操作所需的行。

【讨论】:

    【解决方案2】:

    这种警告实际上不是特别是在 fetchAll() 上,而是在一般情况下。

    事实上,这个函数只是一个语法糖,用于简单地循环查询结果并将它们添加到数组中。因此,如果有数百万个问题,您的页面肯定会崩溃,虽然不是因为 fetchAll(),而是因为数据量。

    所以,对于一般的网页来说,使用这个功能是可以的。
    但是对于一些基于 cron 的数据挖掘脚本,使用它是不明智的 - 创建一个循环并逐行处理每一行,而不是将它们存储到数组中。

    【讨论】:

      【解决方案3】:

      一种检查方法是使用 limit like ,运行 10 个文件,每个文件都有不同的限制。首先, 1000,第二, 2000 ,然后 3000 等等,看看你什么时候出错。你会从中得到想法。

      【讨论】:

      • 如果硬件从不改变,理论上会起作用,但开始发生错误的点会因服务器硬件和配置而异。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-20
      • 2010-09-13
      • 2011-05-26
      • 2010-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多