首页 > 解决方案 > 使用 Angular 和 laravel 停止导入大量记录

问题描述

我正在开发一个带有角度的服务,它将一个包含大量对象的数组发送到一个带有 laravel 的服务器以插入或更新。当我发送 3000 或 5000 条记录时,服务正常工作,但当记录超过 5000 条时,就会发生奇怪的事情。

我有一个在服务器上运行 redis 的 websocket,为进度条提供功能,指示导入记录的进度。当有很多记录时,重新执行服务器上的过程。已经插入或更新的记录再次执行相同的过程。我知道这是因为在数据库中我看到了自动增量 ID、插入或更新注册表的时间和日期。

我第一个表明该过程正在重复的迹象是进度条正在重新启动。好像这不再有问题一样,在第二次意外执行过程中,http 请求结束并返回 ERR_empty_response。

在开始插入或更新过程之前,我打开一个事务,并且只有在该过程成功运行时才执行提交。显然,如果它不运行回滚

你知道它可能是什么吗?

我的服务器运行环境是nginx,Laravel 5.8 (php)。使用该服务的应用程序是使用 Angular 9 开发的

标签: phpangularlaravelnginx

解决方案


我怀疑正在发生的事情是您的工作超时并自动重新启动,因为 Laravel“认为”它失败了,因为它没有返回成功的响应。

我建议你把你的大工作分成更小的工作。这意味着您的“大”工作会收到所有这些请求,但工作本身会创建 5000 个小工作,这些工作会单独处理每个工作。所以大作业会立即返回成功响应,Redis 会尽可能处理每个小作业。


推荐阅读