我有两个表:assignments
和reports
。生成报告以保留分配的统计信息。因此,每次创建或更新任务时,所有报告都必须被任意更新。我做这样的事情:
Multi.new()
|> Multi.insert(:assignment, assignment_changeset(params))
|> Multi.update(:update_reports, update_all_reports())
现在,每当我创建或更新任务时,这都会对服务器造成巨大的损失,因为要更新的报告太多。因此,我遇到了超时问题,因此暂时禁用了报告更新。现在,我想知道是否有更好的方法来批量更新报告而不中断分配操作。
答案 0 :(得分:1)
我确定您有充分的理由更新所有报告,即使我认为由于服务器上的负载而应修改该实现。 我为您提供的解决方案仅解决您所说的超时问题。
您可以将所有内容包装在生成中:
spawn(fn ->
Multi.new()
|> Multi.insert(:assignment, assignment_changeset(params))
|> Multi.update(:update_reports, update_all_reports())
end)
它将创建另一个将在其上进行创建/更新的过程,而请求过程则可以继续进行。 请记住,只有在不需要操作结果的情况下,此方法才有效,否则应考虑使用回调来获取结果。