我必须使用CakePHP在具有60万以上行的表(MySQL)上执行sql请求。
我正在本地测试如何处理这张大桌子。

第一次尝试使用简单的->find('all')时,使用CakePHP时,缓冲区大小有很多错误。
我加

ini_set("memory_limit", "-1");
set_time_limit(0);


在我的index.php中

现在,我的页面加载了很长时间,然后崩溃了。

当我尝试->find('first')仅获得第一行时,同样的事情:该页面加载时间很长,之后遇到错误。

您对此有一些想法吗?

最佳答案

您对此有一些想法吗?



分页。
如果您无法对它进行分页,则必须实现一个作业队列,该作业队列在后台在服务器端执行该任务并生成文档,然后将其作为下载提供给用户。


很明显,如果不遇到一些技术限制,就无法处理大量数据。到60万行时,取决于它们的呈现方式,即使客户端(浏览器)也可能变得非常慢。

更改您的方法,这种方法将无法正常工作。或放一些
百GB的RAM放入您的服务器。

设置ini_set("memory_limit", "-1");绝不是解决方案,而是一个笨拙的解决方法。相反,请确保您的脚本始终在某些预定义的边界内运行。这只会确保脚本在64MB的服务器上启动,但在128MB的服务器上启动,然后在获得更多数据时在128MB的服务器上启动。

10-07 18:54