使用 laravel 读取包含 500,000 条记录的 excel sheet
Reading an excel sheet with 500,000 records with laravel
我有一个 excel sheet 有 50 万条记录。 sheet 有两列,一列是电话号码,另一列是号码所有者的姓名。
我想读取这些数字并将它们提交给发送群发短信的 Web 服务。我想使用 laravel 队列来处理工作 sheet。
如果我使用多个 worker 是否可以更快地读取文件并将其内容插入数据库?我如何确保 worker 不会重新读取其他 worker 已经读取的行?
似乎 laravel-excel 软件包具有此功能(查看 "Queued chunks" 部分)。
查看 source code 确认我的建议,chunk
方法创建 n(行数除以块大小)作业请求,其中每个文件的作业处理部分。您唯一需要做的就是设置 eq。 redis 队列驱动程序并使用 php artisan queue:work
命令启动一些工作人员。
手动解决方案(隐藏在上面的实现中):
- 在不读取整个内容的情况下获取文件中的行数,
- 将行分成 n 部分(行数除以块大小),
- 对于每个部分创建作业请求(您必须传递应由该作业处理的第一行和最后一行的行号)。每个作业都应该打开文件,转到指定的起始行并读取指定行数,
- 启动一些工人。
我有一个 excel sheet 有 50 万条记录。 sheet 有两列,一列是电话号码,另一列是号码所有者的姓名。
我想读取这些数字并将它们提交给发送群发短信的 Web 服务。我想使用 laravel 队列来处理工作 sheet。
如果我使用多个 worker 是否可以更快地读取文件并将其内容插入数据库?我如何确保 worker 不会重新读取其他 worker 已经读取的行?
似乎 laravel-excel 软件包具有此功能(查看 "Queued chunks" 部分)。
查看 source code 确认我的建议,chunk
方法创建 n(行数除以块大小)作业请求,其中每个文件的作业处理部分。您唯一需要做的就是设置 eq。 redis 队列驱动程序并使用 php artisan queue:work
命令启动一些工作人员。
手动解决方案(隐藏在上面的实现中):
- 在不读取整个内容的情况下获取文件中的行数,
- 将行分成 n 部分(行数除以块大小),
- 对于每个部分创建作业请求(您必须传递应由该作业处理的第一行和最后一行的行号)。每个作业都应该打开文件,转到指定的起始行并读取指定行数,
- 启动一些工人。