plusplus
Авг. 27, 2013 15:05:09
Решил ознакомиться с данным фреймворком. Хочу сделать много task-ов, результат каждого должен записываться в базу. Как это сделать? В каждом task-е открывать коннект к базе? Так нельзя. Создать коннект и параметром передавать его в task? Мне кажется так не получится. Подскажите.
Lexander
Авг. 27, 2013 16:03:26
Что должна делать система при нестандартной ситуации?
Например, что будет если задание выполнится, но результат не сможет быть сохранен?
Если нужна атомарность - задание считается выполненным, когда результат его выполнения записан в базу,- тогда воркер должен ставить признак выполнения задания только после записи (в этой части должен работать синхронно). Этот вариант чуть лучше одного соединения с БД, но все равно остается узким местом системы.
Есть разные варианты, выбор зависит от условий:
1. после выполнения задания воркер создает новое - запись результата, другой воркер его выполняет.
2. сделать отдельное приложение, которое обслуживает задания и имеет одно соединения с БД или пул соединений (зависит от интенсивности нагрузки), после выполнения основного задания его результат попадает в очередь этого приложения, приложение записывает в БД (это доп. задание к основному) и возвращает результат записи обратно воркеру основного задания.
3. выполненные задания сохраняются в промежуточном буфере и записываются в БД в пакетном режиме отдельным приложением.
Это только для примера, навскидку.