У меня есть таблица баз данных с ~ 50 тыс. строк, каждая строка представляет собой задание, которое необходимо выполнить. У меня есть программа, которая извлекает задание из БД, выполняет задание и возвращает результат в БД. (эта система работает прямо сейчас)
Теперь я хочу разрешить более чем одной задаче обработки выполнять задания, но быть уверенным, что ни одна задача не будет выполняться дважды (из соображений производительности, а не из-за того, что это вызовет другие проблемы). Поскольку доступ осуществляется через хранимую процедуру, мой текущий вопрос заключается в том, чтобы заменить указанную хранимую процедуру чем-то вроде этого
update tbl
set owner = connection_id()
where available and owner is null limit 1;
select stuff
from tbl
where owner = connection_id();
КСТАТИ; рабочие задачи могут прервать связь между получением работы и отправкой результатов. Кроме того, я не ожидаю, что БД даже приблизится к тому, чтобы стать узким местом, если я не испорчу эту часть (~ 5 заданий в минуту).
Есть ли какие-либо проблемы с этим? Есть лучший способ сделать это?
Примечание: "База данных как антишаблон IPC" здесь лишь немного уместна, потому что
- Я не делаю IPC (нет процесса, генерирующего строки, они все уже существуют прямо сейчас) и
- основная проблема, описанная для этого анти-шаблона, заключается в том, что он приводит к ненужной нагрузке на БД, поскольку процессы ждут сообщений (в моем случае, если сообщений нет, все может завершиться, когда все будет сделано)