我必须使用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的服务器上启动。