【发布时间】:2023-03-12 11:58:02
【问题描述】:
我在一行中插入大约 4000-5000 条记录,平均而言,插入请求在每条记录的 1 毫秒内连续发送,直到添加所有记录。整个导入包含在一个事务中。作业失败并出现以下错误:
ActionView::Template::Error (Failed. Response code = 429. Response message = Too Many Requests.):
我已将错误追溯到我的 model.create 语句。我知道没有办法使用 ActiveRecord 一次插入多条记录,那么是否可以在短时间内增加我可以发出的请求数量?或者,我必须使用 gem 一次插入多条记录吗?即activerecord-import
我很确定我是否捕获了 ActionView::Template::Error 并在重试之前退避了几秒钟,但有没有其他方法可以做到这一点?
【问题讨论】:
-
您能否提供一些有关您实际尝试解决的任务的详细信息?为什么需要在一个请求中插入 4000 条记录?
-
这个导入只是偶尔运行一次,它基本上从外部API中获取大量记录并保存到我们的数据库中。来自外部 API 的数据以页面的形式出现,但目前我们正在获取所有页面并将其全部存储起来,因此它是原子的。
-
如果您经常这样做,您可能需要使用类似的批量插入工具。
-
对,但是除了批量插入工具之外,我还能做什么?
标签: mysql ruby-on-rails ruby ruby-on-rails-4 activerecord