Melhor maneira de usar uma tabela de banco de dados como uma fila de mensagens / tarefas

Eu tenho uma tabela de bancos de dados com ~ 50K linhas, cada linha representa um trabalho que precisa ser feito. Eu tenho um programa que extrai um trabalho do banco de dados, faz o trabalho e coloca o resultado novamente no banco de dados. (este sistema está sendo executado no momento)

Agora, quero permitir que mais de uma tarefa de processamento faça trabalhos, mas certifique-se de que nenhuma tarefa seja executada duas vezes (como uma preocupação de desempenho, não que isso cause outros problemas). Como o acesso é feito por meio de um sproce, minha corrente atual é substituir o referido sproce por algo que se parece com isso

update tbl set owner=connection_id() where avalable and owner is null limit 1;
select stuff from tbl where owner = connection_id();

BTW; as tarefas do trabalhador podem deixar de existir uma conexão entre conseguir um emprego e enviar os resultados. Além disso, não espero que o DB chegue perto de ser o gargalo da garrafa, a menos que eu estrague essa parte (~ 5 trabalhos por minuto)

Há algum problema com isso? Existe uma maneira melhor de fazer isso?

Note o"Banco de dados como um anti-padrão IPC" é apenas um pouco apropriado aqui porque 1) eu não estou fazendo IPC (não há processo gerando as linhas, todas já existem no momento) e 2) a queixa principal descrita para esse anti-padrão é que resulta em carga desnecessária o banco de dados enquanto processos aguardam mensagens (no meu caso, se não houver mensagens, tudo pode ser encerrado à medida que tudo estiver pronto)

questionAnswers(4)

yourAnswerToTheQuestion