我需要从mysql中提取大量数据。适当地达到100,000+。我已经完成了使用索引和其他东西处理数据的优化。我现在面临的问题是内存溢出。每当我试图将数据拉高到100,000以上时,它就会显示内存大小错误。我已将内存限制设置为512M,但可能存在大数据的可能性,因此我无法每次都增加内存。有没有更好的方法来处理这个问题。我正在使用cakephp,我需要一次为我的系统提供所有数据。
答案 0 :(得分:2)
你无法逃避内存有限的事实。期。要求很愚蠢但很好。您必须以适合可用内存的块的形式处理数据,并将块发送到客户端或将它们附加到您正在编写的文件中。
这基本上是AJAX分页或“无限加载”,只是你没有更改页面,而是将下一页追加到DOM树中的上一页,直到你到达最后一页。在加载所有记录并且DOM树中存在数百万个元素时,享受可能非常慢响应站点的乐趣。 ;)
另一种方法是在后台作业(shell,cron任务)中创建视图,然后将预生成的文件发送到客户端,就像静态页面一样。 shell也必须对数据进行分页并附加它以解决内存限制问题。