Ecto-あるテーブルのレコードのバッチを別のテーブルに関して非同期に更新する方法

バーゲン23

私は2つのテーブルを持っています:assignmentsreports割り当てに関する統計を保持するためにレポートが作成されます。したがって、割り当てが作成または更新されるたびに、すべてのレポートを無差別に更新する必要があります。私はこのようなことをします:

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

現在、更新するレポートが多すぎるため、割り当てを作成または更新するたびに、サーバーに多大な負担がかかります。このためにタイムアウトが発生したため、今のところレポートの更新を無効にしました。さて、割り当て操作を中断せずにレポートを一括更新するより良い方法があるかどうか疑問に思いました。

TheSquad

サーバーの負荷が原因で実装を修正する必要があると思われる場合でも、すべてのレポートを更新する正当な理由があると確信しています。私があなたに与えている解決策は、あなたが話したタイムアウトに対処するだけです。

あなたはスポーンですべてを包むことができます:

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

作成/更新が行われる別のプロセスが作成され、リクエストプロセスは自由にコースを続行できます。操作の結果が必要ない場合にのみ機能することに注意してください。それ以外の場合は、結果を取得するためにコールバックを検討する必要があります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Ectoを使用して実行時にテーブルを作成する

分類Dev

Ecto.Multiでレコードを更新する際の問題

分類Dev

Ecto:別の結合された列を選択してレコードをプリロードする方法

分類Dev

Ecto-テーブルBまたはCのテーブルAに対する外部キー制約。ただし、BとCの両方ではない

分類Dev

Ecto-関連付けに基づいてテーブルをクエリする

分類Dev

フェニックスでEctoを使用してデータをフェッチするときに、特定のフィールドのみを取得する

分類Dev

Ectoで挿入する前にレコードを照会する(ARコールバックと同様)

分類Dev

Ecto / Elixirを使用して行「FORUPDATEOF」固有のテーブルをロックします

分類Dev

Ecto for Elixir:外部キー

分類Dev

Ecto-レコードの更新-未定義の関数__changeset__ / 0

分類Dev

ectoクエリ式を使用して3つのテーブル間で結合およびフィルタリングする方法は?

分類Dev

Ectoモデルの非公開スキーマからテーブルを選択する

分類Dev

Ecto移行でフィールド値を動的に更新する方法は?

分類Dev

ectoクエリを使用して3つのテーブルを結合します

分類Dev

ectoの複合主キー

分類Dev

Phoenix / Ectoを使用してデータベースの最後のレコードを表示する

分類Dev

ectoの仮想モデル

分類Dev

Ecto スキーマの値を期限切れにする方法は?

分類Dev

更新時のEcto.StaleEntryError

分類Dev

Ecto.Queryを使用してUUIDでテーブルをクエリすると、Ecto.Query.CastErrorが発生します

分類Dev

Ecto-テーブルエントリが更新されない

分類Dev

Ectoを使用して、日時を含むテーブルを時間でどのように並べ替えますか?

分類Dev

ectoによる逆多型

分類Dev

ectoによる逆多型

分類Dev

自分のモジュールをEctoの仮想フィールドとして定義するときにエラーが発生しました

分類Dev

ectoテーブルが作成されていません

分類Dev

Ectoのタイムスタンプを使用して既存のテーブルにタイムスタンプを追加するにはどうすればよいですか?

分類Dev

ectoで同等のfirst_or_create

分類Dev

Ectoの配列を更新します

Related 関連記事

  1. 1

    Ectoを使用して実行時にテーブルを作成する

  2. 2

    Ecto.Multiでレコードを更新する際の問題

  3. 3

    Ecto:別の結合された列を選択してレコードをプリロードする方法

  4. 4

    Ecto-テーブルBまたはCのテーブルAに対する外部キー制約。ただし、BとCの両方ではない

  5. 5

    Ecto-関連付けに基づいてテーブルをクエリする

  6. 6

    フェニックスでEctoを使用してデータをフェッチするときに、特定のフィールドのみを取得する

  7. 7

    Ectoで挿入する前にレコードを照会する(ARコールバックと同様)

  8. 8

    Ecto / Elixirを使用して行「FORUPDATEOF」固有のテーブルをロックします

  9. 9

    Ecto for Elixir:外部キー

  10. 10

    Ecto-レコードの更新-未定義の関数__changeset__ / 0

  11. 11

    ectoクエリ式を使用して3つのテーブル間で結合およびフィルタリングする方法は?

  12. 12

    Ectoモデルの非公開スキーマからテーブルを選択する

  13. 13

    Ecto移行でフィールド値を動的に更新する方法は?

  14. 14

    ectoクエリを使用して3つのテーブルを結合します

  15. 15

    ectoの複合主キー

  16. 16

    Phoenix / Ectoを使用してデータベースの最後のレコードを表示する

  17. 17

    ectoの仮想モデル

  18. 18

    Ecto スキーマの値を期限切れにする方法は?

  19. 19

    更新時のEcto.StaleEntryError

  20. 20

    Ecto.Queryを使用してUUIDでテーブルをクエリすると、Ecto.Query.CastErrorが発生します

  21. 21

    Ecto-テーブルエントリが更新されない

  22. 22

    Ectoを使用して、日時を含むテーブルを時間でどのように並べ替えますか?

  23. 23

    ectoによる逆多型

  24. 24

    ectoによる逆多型

  25. 25

    自分のモジュールをEctoの仮想フィールドとして定義するときにエラーが発生しました

  26. 26

    ectoテーブルが作成されていません

  27. 27

    Ectoのタイムスタンプを使用して既存のテーブルにタイムスタンプを追加するにはどうすればよいですか?

  28. 28

    ectoで同等のfirst_or_create

  29. 29

    Ectoの配列を更新します

ホットタグ

アーカイブ