Size: a a a

2021 January 04

LL

Lama Lover in pro.elixir
Mexx
А что будет с конекшеном к базе?
Обычно поднимается не одно соединение к базе, а несколько через DBConnection. Созданный Task будет ждать ответа от базы, а процесс, создавший Task сможет работать во время исполнения запроса, пока не захочет получить результат через Task.await

Тут только нужно быть осторожным что Task.await ждёт результата 5 секунд, а потом падает. Для базы данных лучше использовать Task.await(task, :infinity)
источник

M

Mexx in pro.elixir
Bogdan
А зачем, кстати базу таким образом обновлять?
Так логика написана, происходит некий ивент, и надо обновить в других таблицах поля и я увидел такой код (транзауционномти нет). Вот стало интересно насколько это правильно
источник

M

Mexx in pro.elixir
Lama Lover
Обычно поднимается не одно соединение к базе, а несколько через DBConnection. Созданный Task будет ждать ответа от базы, а процесс, создавший Task сможет работать во время исполнения запроса, пока не захочет получить результат через Task.await

Тут только нужно быть осторожным что Task.await ждёт результата 5 секунд, а потом падает. Для базы данных лучше использовать Task.await(task, :infinity)
Никто не вызывает Task.await -> результат на данном этапе не нужен, главное что б выполнился
источник

LL

Lama Lover in pro.elixir
Mexx
Так логика написана, происходит некий ивент, и надо обновить в других таблицах поля и я увидел такой код (транзауционномти нет). Вот стало интересно насколько это правильно
Вообще не вижу смысла работать с базой через Task, потому что обычно запросы в базу выполняются в рамках одной транзакции (а для этого нужно выполнять всё в одном процессе)
источник

M

Mexx in pro.elixir
Lama Lover
Вообще не вижу смысла работать с базой через Task, потому что обычно запросы в базу выполняются в рамках одной транзакции (а для этого нужно выполнять всё в одном процессе)
Вот поэтому и вопрос
источник

M

Mexx in pro.elixir
Если нет Task.await то нет и контроля над выполнением процесса, правильно ж я понимаю?
источник

LL

Lama Lover in pro.elixir
Mexx
Если нет Task.await то нет и контроля над выполнением процесса, правильно ж я понимаю?
Есть, процесс который Task и процесс, создающий Task соединяются через link (если через Task.async), поэтому если кто-то из них упадёт, то обязательно упадёт и второй
источник

B

Bogdan in pro.elixir
Mexx
Так логика написана, происходит некий ивент, и надо обновить в других таблицах поля и я увидел такой код (транзауционномти нет). Вот стало интересно насколько это правильно
Если завернешь каждое обращение к алгоритму в отдельном процессе то если процесс закрашится на другие процессы это не повлияет.

Я бы подрубил какого-нибудь брокера, и алгоритм запоковал в Broadway, там есть batcher и acknowlege из коробки, ну и каждый запрос пойдет в отдельно процессе изолированно. Быстро настраивается.
источник

B

Bogdan in pro.elixir
Ну и  Ecto ты уже видел?
источник

M

Mexx in pro.elixir
Это все поверх экто
источник

B

Bogdan in pro.elixir
Тогда Broadway попробуй
источник

B

Bogdan in pro.elixir
И будешь спать спокойно)
источник

LL

Lama Lover in pro.elixir
Bogdan
Тогда Broadway попробуй
Хз зачем тут Broadway, он немного про другое по-моему
источник

M

Mexx in pro.elixir
Бегло прочитал про broadway, показалось что он больше для подготовки работы с данными (ml, ds)
источник

LL

Lama Lover in pro.elixir
Mexx
Бегло прочитал про broadway, показалось что он больше для подготовки работы с данными (ml, ds)
Он для pull обработки потоков сообщений
источник

LL

Lama Lover in pro.elixir
Возможно @bo_one как-то по-другому использует Broadway, возможно он знает что-то чего не знаю я, хехе)
источник

B

Bogdan in pro.elixir
Я для ETL в основном его пользую
источник

M

Mexx in pro.elixir
Не много истории проек а, писали его ребята которые пришли с ruby и их увлек elixir и многопоточность. Моя версия что использование запроса к базе данных в пайпе через Таск это чересчур оптимизация
источник

B

Bogdan in pro.elixir
Или чего-то похожее на него
источник

M

Mexx in pro.elixir
По факту, если оба процесса слинкованны и если закрешиться Таск, то упадёт и основной - то я не вижу надобности разделять это
источник