2

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

我想阅读这些数字并将它们提交给发送批量短信的网络服务。我想使用 laravel 队列来处理工作表。

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

4

1 回答 1

4

似乎laravel-excel包具有此功能(查看“排队的块”部分)。

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

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

  1. 在不读取整个内容的情况下获取文件中的行数,
  2. 将行划分为n 个部分(行数除以块大小),
  3. 对于每个部分创建作业请求(您必须传递应该由该作业处理的第一行和最后一行编号)。每个作业都应该打开文件,转到指定的起始行并读取指定的行数,
  4. 启动一些工人。
于 2017-04-19T12:10:03.657 回答