Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel—将数据排序并导出到CSV的更好方法_Php_Laravel_Sorting_Csv_Memory - Fatal编程技术网

Php Laravel—将数据排序并导出到CSV的更好方法

Php Laravel—将数据排序并导出到CSV的更好方法,php,laravel,sorting,csv,memory,Php,Laravel,Sorting,Csv,Memory,我正在使用Laravel处理一个项目,我目前有一个cron来处理数据并生成2个CSV文件:1个已排序(调用文件a),另1个未排序(文件B) 每个文件大约10mb,cron每天都会被触发,我们不需要数据库来存储结果 我目前正在做这样的事情: Cron运行并将所有结果存储到数据库中的临时表中 完成该过程后,从该表中读取数据并写入文件B(无排序的正常文件) 然后,再次运行另一个查询,从表中获取排序后的数据,然后写入文件A 之后,清空临时表 因为结果数据太大,无法存储为数组(内存不足),所以我们最终

我正在使用Laravel处理一个项目,我目前有一个cron来处理数据并生成2个CSV文件:1个已排序(调用文件a),另1个未排序(文件B)

每个文件大约10mb,cron每天都会被触发,我们不需要数据库来存储结果

我目前正在做这样的事情:

  • Cron运行并将所有结果存储到数据库中的临时表中
  • 完成该过程后,从该表中读取数据并写入文件B(无排序的正常文件)
  • 然后,再次运行另一个查询,从表中获取排序后的数据,然后写入文件A
  • 之后,清空临时表
因为结果数据太大,无法存储为数组(内存不足),所以我们最终使用临时表来存储它们

我的问题是:对于这种情况,有没有更好的方法

感谢

我们使用光标解决了将大数据导出为csv时出现的一些“内存不足”错误。 “内存不足”发生在经典的雄辩方法(Model::where(…)->get()和chunk函数中。 您可以通过以下方式使用光标:

use App\Models\Flight;

foreach (Flight::where('destination', 'Zurich')->cursor() as $flight) {
    // write the record in your csv file
}
您可以在此处找到更多文档:

我们使用游标解决了将大数据导出为csv时出现的一些“内存不足”错误。 “内存不足”发生在经典的雄辩方法(Model::where(…)->get()和chunk函数中。 您可以通过以下方式使用光标:

use App\Models\Flight;

foreach (Flight::where('destination', 'Zurich')->cursor() as $flight) {
    // write the record in your csv file
}

您可以在这里找到更多的文档:

如果它工作正常并且性能相对较好,那么老实说,我会称之为“暂时不错”,然后继续下一个任务。如果它真的成为瓶颈,你可以研究重构。10Mb听起来不像是会导致内存不足错误的数据量。是的,我现在的任务是改进这个过程。这并不重要,但如果我们能够找到对CSV文件进行排序的方法,我们希望去掉临时表(数据库)@apokryfos是的10mb不是什么大问题,但这并不是cron需要消耗资源的唯一原因如果它工作正常且性能相对较好,那么老实说,我会称之为“目前良好”,并继续下一个任务。如果它真的成为瓶颈,你可以研究重构。10Mb听起来不像是会导致内存不足错误的数据量。是的,我现在的任务是改进这个过程。这并不重要,但如果我们能够找到对CSV文件进行排序的方法,我们希望去掉临时表(数据库)@apokryfos是的,10mb不是什么大问题,但这并不是cron需要消耗资源的唯一原因