【问题标题】:Best solution to import and update millions of records every day on Heroku每天在 Heroku 上导入和更新数百万条记录的最佳解决方案
【发布时间】:2021-05-03 05:19:55
【问题描述】:

我必须执行一些 rake 任务,这些任务每天使用来自 CSV 文件的数据导入和更新数百万个产品。我目前使用 Heroku Scheduler 来运行 rake 任务,但我发现它不能正常工作。我有一个导入数据的任务,然后是另一个更新数据的任务。

我的两个问题是:

  • 我的 rake 任务有时会崩溃,因此无法导入所有数据,我尝试对代码的每个敏感部分使用 begin 和 rescue,但它似乎没有完成这项工作。

  • 另一个问题是每天凌晨 2 点运行导入任务,并在上午 9 点更新。但有时导入任务在上午 9 点尚未完成,因此更新任务永远不会运行。

我应该使用什么资源在 Heroku 上完成所有这些大数据工作?也许其他解决方案(例如 Amazon AWS 或 Google Cloud)会更适合?

【问题讨论】:

  • 请显示那些 rake 任务。 (主要部分)
  • 您可以修复“有时崩溃”并等待第二个任务,直到第一个任务完成。由于我们掌握的信息很少,没有什么可说的了。

标签: ruby postgresql heroku


【解决方案1】:

我的第一个想法是将 CSV 导入数据库中的临时表,而不进行任何更改或数据转换。使用纯 SQL 应该很快。

然后我将为临时表中的每一行创建一个后台作业(例如使用 Sidekiq)。而且这些作业中的每一个都应该只导入该特定行。

并行运行多个后台作业应该会显着加快进程。另外,当一行出现错误且无法导入时,其他作业不会受到影响,后台作业队列会准确显示哪个作业,因此无法导入哪一行以及原因。

【讨论】:

  • 你有资源或教程吗?
  • @user3805610 Sidekiq Pro 的Batches 功能听起来很合适。文档显示了一个并行导入 Excel 文件行的基本示例。每一行都被处理一个单独的作业,并且批处理作为一个整体跟踪进度。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多