Ecto - как асинхронно обновлять пакет записей из одной таблицы относительно другой таблицы - PullRequest
1 голос
/ 17 июня 2019

У меня есть две таблицы: assignments и reports. Отчет составляется для ведения статистики по назначениям. Таким образом, каждый раз, когда назначение создается или обновляется, все отчеты должны быть без разбора обновлены. Я делаю что-то вроде этого:

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

Теперь, когда я создаю или обновляю назначение, это приводит к огромным потерям на сервере, потому что слишком много отчетов для обновления. Из-за этого у меня возникли тайм-ауты, поэтому я пока отключил обновление отчетов. Теперь мне было интересно, есть ли лучший способ массового обновления отчетов без прерывания операций назначения.

1 Ответ

1 голос
/ 17 июня 2019

Я уверен, что у вас есть веская причина для обновления ВСЕХ отчетов, даже если я думаю, что реализация должна быть пересмотрена из-за ее нагрузки на сервер.Решение, которое я даю вам, относится только к тому времени ожидания, о котором вы говорили.

Вы можете обернуть все в спавн:иметь место, оставляя процесс запроса свободным, чтобы продолжить его ход.Имейте в виду, что это работает, только если вам не нужны результаты операции, в противном случае вам следует рассмотреть возможность обратного вызова для получения результатов.

...