私は2つのテーブルを持っています:assignments
と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)
作成/更新が行われる別のプロセスが作成され、リクエストプロセスは自由にコースを続行できます。操作の結果が必要ない場合にのみ機能することに注意してください。それ以外の場合は、結果を取得するためにコールバックを検討する必要があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加