使用Laravel处理大型数据库的最佳方式

9 浏览
0 Comments

使用Laravel处理大型数据库的最佳方式

数据库

我正在处理一个有很大表格的数据库,这给我带来了问题。其中一个表格有超过120k行。

我的处理方式

我在一个名为MakeAverage.php的文件中循环遍历这个表格,将它们合并成一个新表格中的大约1k行数据。

问题所在

即使我尝试使用DB::disableQueryLog()或者take(1000)来限制数量,Laravel也不允许我一次处理所有数据。每次都会返回一个空白页面,即使我启用了错误报告(类似于这样)。而且,我没有为此问题找到Laravel的日志文件。我不得不查看我的php_error.log(我使用的是MAMP),才意识到这实际上是一个memory_limit的问题。

我的解决方法

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

结果如何?

这个方法行得通了!然而,由于数据量太大,页面在30秒后仍未加载完成,Laravel给我抛出了一个错误。

0
0 Comments

最佳处理大型数据库的Laravel方法

在研究了这个问题并查看了其他人遇到类似问题的情况之后(参见:Laravel论坛,19453595,18775510和12443321),我认为也许PHP并不是解决方案。

由于我只是从"表A"的平均值创建一个"表B",我相信SQL会更适合我的需求,因为它对于这种类型的操作来说明显比PHP更快(参见:6449072),而且我可以使用诸如SUM,AVERAGE,COUNT和GROUP_BY的函数(参见:参考)。

原因:

- 在处理大型数据库时,PHP可能会耗尽内存并导致问题。

- 创建一个新表并计算平均值是一个相对耗时的操作,使用SQL可以更快地完成。

解决方法:

- 使用SQL而不是PHP来处理大型数据库。SQL可以更快地执行计算操作。

- 使用SUM,AVERAGE,COUNT和GROUP_BY等函数来进行必要的计算和分组。

- 参考MySQL文档以了解这些函数的用法和语法。

通过使用SQL而不是PHP来处理大型数据库,可以更有效地处理数据并避免耗尽内存的问题。使用诸如SUM,AVERAGE,COUNT和GROUP_BY等函数可以更方便地进行必要的计算和分组。请参考MySQL文档以了解如何使用这些函数。

0