Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 如何从一个表相对于另一个表异步更新一批记录_Elixir_Phoenix Framework_Ecto - Fatal编程技术网

Elixir 如何从一个表相对于另一个表异步更新一批记录

Elixir 如何从一个表相对于另一个表异步更新一批记录,elixir,phoenix-framework,ecto,Elixir,Phoenix Framework,Ecto,我有两个表格:作业和报告。制作一份报告来保存任务的统计信息。因此,每次创建或更新任务时,都必须不加区别地更新所有报告。我是这样做的: Multi.new() |> Multi.insert(:assignment, assignment_changeset(params)) |> Multi.update(:update_reports, update_all_reports()) 现在,每当我创建或更新任务时,这会给服务器带来巨大的损失,因为有太多的报告需要更新。因此我经历了超时

我有两个表格:
作业
报告
。制作一份报告来保存任务的统计信息。因此,每次创建或更新任务时,都必须不加区别地更新所有报告。我是这样做的:

Multi.new()
|> Multi.insert(:assignment, assignment_changeset(params))
|> Multi.update(:update_reports, update_all_reports())

现在,每当我创建或更新任务时,这会给服务器带来巨大的损失,因为有太多的报告需要更新。因此我经历了超时,因此我暂时禁用了报告更新。现在,我想知道是否有更好的方法在不中断分配操作的情况下批量更新报告。

我确信您有充分的理由更新所有报告,即使我认为由于服务器上的负载,应该修改实现。 我给你的解决方案只解决了你提到的超时问题

您可以将所有内容包装在一个种子中:

spawn(fn -> 
  Multi.new()
  |> Multi.insert(:assignment, assignment_changeset(params))
  |> Multi.update(:update_reports, update_all_reports())
end)
它将创建另一个进程,在该进程上进行创建/更新,使请求进程可以自由地继续它的进程。
请记住,只有在不需要操作结果的情况下才能工作,否则您应该考虑回调以获得结果。您认为我应该如何更改实现?我确实需要创建/更新作业的结果,因为我需要重定向到作业的“显示”页面。我不太确定,我没有足够的信息。真正的问题是,为什么在创建新记录时需要不加区别地更新所有记录?如果需要结果,但不关心所需的时间,则在操作完成后,始终可以使用Phoenix Live View(或任何websocket连接解决方案)动态更新前端