php - 使用 Laravel 读取包含 500,000 条记录的 Excel 工作表

标签 php laravel laravel-queue

我有一张包含 50 万条记录的 Excel 工作表。该表有两列,一列是电话号码,另一列是号码所有者的姓名。

我想读取这些号码并将其提交到发送批量短信的网络服务。我想使用 laravel 队列来处理工作表。

如果我使用多个工作人员,是否可以更快地读取文件并将其内容插入数据库,以及如何确保工作人员不会重新读取其他工作人员已读取的行?

最佳答案

似乎laravel-excel包具有此功能(请参阅“排队 block ”部分)。

查看source code确认我的建议,chunk 方法创建 n(行数除以 block 大小)作业请求,其中每个作业处理文件的一部分。您唯一需要做的就是设置 eq。 redis 队列驱动程序并使用 php artisanqueue:work 命令启动一些工作程序。

手动解决方案(隐藏在上述实现下):

  1. 获取文件中的行数而不读取整个内容,
  2. 将行分为 n 个部分(行数除以 block 大小),
  3. 对于每个零件创建作业请求(您必须传递应由该作业处理的第一个和最后一个行号)。每个作业应该打开文件,转到指定的起始行并读取指定的行数,
  4. 启动一些工作线程。

关于php - 使用 Laravel 读取包含 500,000 条记录的 Excel 工作表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43486159/

相关文章:

Laravel 通知 - 延迟电子邮件发送并在条件满足时取消

php - 4 个表之间的关系 Laravel 5.1

php - mysql插入日期时间不输出正确的时间

Laravel + Datatables,如何将 id 传递给 Controller ​​?

laravel - 无法登录到 Gitlab CI 中的 MSSQL docker 以开始测试迁移

php - 我怎样才能只运行一次 Laravel 队列?

php - Laravel 动态单例绑定(bind)无法通过 Queue Worker 解析

php - 使用 codeigniter 的多图像

php - 隐藏下载网址

html - Bootstrap : Issue with columns not adding up to 12 and being put on new rows