【问题标题】:Best way to process large database with Laravel使用 Laravel 处理大型数据库的最佳方法
【发布时间】:2013-11-11 23:12:30
【问题描述】:

数据库

我正在使用具有相当大表的数据库,这给我带来了问题。特别是有超过 120k 行。

我在做什么

我在 MakeAverage.php 文件中循环遍历此表,以将它们合并到我数据库中新表中的大约 1k 行中。

什么不起作用

Laravel 不允许我一次处理所有内容,即使我尝试使用 DB::disableQueryLog()take(1000) 限制。即使启用了我的错误报告(有点像this),它每次都会返回一个空白页。另外,我没有为此的 Laravel 日志文件。我必须查看我的 php_error.log(我正在使用 MAMP)才能意识到这实际上是一个 memory_limit 问题。

我做了什么

在执行我的代码之前,我使用ini_set('memory_limit', '512M') 增加了内存量。 (这是不好的做法,我应该在 php.ini 中这样做。)

发生了什么?

成功了!但是,Laravel 给我报错了,因为数据量很大,30s 后页面没有完成加载。

【问题讨论】:

  • 听起来你没有在average.php 中正确循环$table。你能发布你在那里的相关代码以及你用来创建$table的代码吗?
  • 如果您还没有检查错误日志 - 这可能是错误而不是内存限制。您通常会收到关于内存限制问题而不是空白页的错误 - 我猜错误报告已关闭?
  • 一件小事,但我不认为这是你的全部问题...Trialdata::all()->get() 将不起作用,应该是Trialdata::all()。那应该会引发错误,因为它对我来说确实如此。
  • @fideloper 我的错误报告已开启。我的日志说:exception 'ErrorException' with message 'Use of undefined constant memory_limit - assumed 'memory_limit''
  • @user1669496 确实,我在这里写代码时犯了一个错误,但我的原始文件很好。即使我添加了->get(),它也不会给我一个错误,就像 Laravel 在阅读 ::all() 后停止一样。之后写入的所有内容都不会被处理。

标签: mysql sql database laravel-4 database-performance


【解决方案1】:

我会做什么

在这个问题上花了一些时间并查看了其他有类似问题的人(请参阅:Laravel forum194535951877551012443321)后,我认为 PHP 可能不是解决方案。

因为,我只是从Table A 的平均值创建Table B,我相信 SQL 将最适合我的需求,因为对于这种类型的操作,它显然比 PHP 更快(请参阅: 6449072),我可以使用SUMAVERAGECOUNTGROUP_BY(Reference)等函数。

【讨论】:

    猜你喜欢
    • 2020-11-04
    • 1970-01-01
    • 2016-09-28
    • 2018-02-18
    • 1970-01-01
    • 2012-02-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-13
    相关资源
    最近更新 更多