Tenho uma tabela no Mysql na WEB chamada fila, aonde são gravados uns “pedidos”.
Preciso que duas maquinas acessem essa tabela para retirar os pedidos, mais a maquina que acessar tem que apagar o pedido presente para que a outra não tenha acesso.
Outra coisa, como saber quando essa tabela apresenta um novo pedido? faço um while para ficar criando query acada x segundo?
A resposta à primeira pergunta é “transações”. Usualmente você começa uma transação, faz a consulta, atualiza a tabela (se for o caso, é claro) e termina a transação.
Bom, se vai usar uma tabela de banco de dados para isso, você não escapa de ter que consultar periodicamente o banco (já que triggers, que são recursos do banco de dados que permitem executar código quando registros forem alterados, inseridos ou removidos, não costuma executar código externo ao banco de dados, até por razões de segurança.
A
aero_wil
Existe alguma Query que lê a tabela e apaga o registro ao mesmo tempo?
A
AbelBueno
Como sugestão: não seria melhor usar um mecanismo de fila realmente ao invés de fazer no banco?
Você pode aplicar a seguinte sequência para isso (Digamos que as duas máquinas acessando são M1 e M2) :
Crie um campo Maquina nessa tabela de pedidos
Ao inserir registros na tabela, este campo deve ser nulo.
Quando for a hora de uma máquina ler pedidos, a primeira coisa que ela faz é um Update, setando Maquina com o nome dela ONDE Maquina for nulo.
Select em todos os campos onde Maquina for igual o nome da máquina
Processa os pedidos
Apaga todos os campos onde Maquina for igual nome da máquina
Você pode querer realizar todas essas etapas dentro da mesma transação, se o processamento de pedidos for relativamente rápido.
A
aero_wil
legal!
Gostei da dica, vou tentar
Sera que eu teria problema se colocasse isso num while nas duas maquinas, não trabalhando com transação?
UPDATE fila SET maquina=1 WHERE maquina=0 order by codigo limit 5