[SP-pm] Bloqueando registros para processamento

Andre Carneiro andregarciacarneiro at gmail.com
Tue Sep 24 03:36:36 PDT 2013


Posso estar errado, mas isso funciona apenas com InnoDB.


2013/9/24 Andre Carneiro <andregarciacarneiro at gmail.com>

> Humm.. transações + MySQL .... medo!
>
>
> BEGIN não rola no MySQL. Subistitua por START TRANSACTION
>
> Ah é! E no momento da conexão com o banco de dados, sete a variável
> AutoCommit do DBI para 0.
>
> my $dbh = DBI->connect(blabla,$usuario,$senha,{AutoCommit=>0}) or die
> $DBI::errstr;
>
>
>
>
>
>
> Proost!
>
>
>
>
>
>
>
>
> 2013/9/23 Marcio - Google <marciorp at gmail.com>
>
>> Tiago, eu tava pensando em algo mais simples ... tipo a ideia que o
>> Renato acabou de postar.
>>
>>
>> [...]'s
>>
>> Marcio
>>
>> ========================================
>> ########### Campanha Ajude o Marcio! ###########
>> http://sosmarcio.blogspot.com.br/
>> http://www.vakinha.com.br/VaquinhaP.aspx?e=195793
>> ========================================
>>
>>
>> Em 23 de setembro de 2013 19:05, Marcio - Google <marciorp at gmail.com>escreveu:
>>
>> R
>>> ​enato++++
>>>
>>> Era mais ou menos isso que tava pensando mesmo.
>>> Mas como faço isso usando o DBI. Não consegui.
>>>>>>
>>>
>>> [...]'s
>>>
>>> Marcio
>>>
>>> ========================================
>>> ########### Campanha Ajude o Marcio! ###########
>>> http://sosmarcio.blogspot.com.br/
>>> http://www.vakinha.com.br/VaquinhaP.aspx?e=195793
>>> ========================================
>>>
>>>
>>> Em 23 de setembro de 2013 17:33, Renato Santos <renato.cron at gmail.com>escreveu:
>>>
>>> explicando melhor,
>>>>
>>>> já que você não parece ter ninguem pra controlar de verdade quantos
>>>> registros tem para ser processados,
>>>> voce pode fazer um
>>>>
>>>> BEGIN;
>>>> SELECT xxx FROM table WHERE not_processed LIMIT 1 FOR UPDATE ;
>>>> <processa>
>>>> UPDATE
>>>>
>>>> COMMIT;
>>>>
>>>> como só tem um 'limit 1' você teria q rodar isso várias vezes.
>>>>
>>>> vocẽ tambem pode aumentar o número, só que ai se você colocar 100, e só
>>>> tiver 40 registros, o segundo e os demais processos não vão pegar ninguem.
>>>>
>>>>
>>>>
>>>> 2013/9/23 Renato Santos <renato.cron at gmail.com>
>>>>
>>>>> Como é mysql, só posso dizer:
>>>>>
>>>>> http://dev.mysql.com/doc/refman/5.0/en/innodb-locking-reads.html
>>>>>  boa sorte!
>>>>>
>>>>>
>>>>>
>>>>> 2013/9/23 Marcio - Google <marciorp at gmail.com>
>>>>>
>>>>>> Salve Mongers!
>>>>>>
>>>>>> Tenho uma tabela em MySql com algumas centenas de registros.
>>>>>>
>>>>>> Em alguns momentos tenho que "processar" esses registros da forma
>>>>>> mais rápida possível.
>>>>>>
>>>>>> O tempo de processamento de cada registro é de aproximadamente 4-5
>>>>>> segundos, tempo esse alheio ao meu controle ou a minha vontade.
>>>>>>
>>>>>> Para agilizar, rodo várias vezes o mesmo app, e cada vez que ele sobe
>>>>>> pega um lote de registros. Para impedir que a próxima cópia do app a subir
>>>>>> pegue os mesmos registros, criei uma coluna a mais, e quando o app sobe ele
>>>>>> verifica se a coluna tá vazia, se tiver ele grava o PID dele.
>>>>>>
>>>>>> Está funcionando mais ou menos, exceto pelo fato que não gostei da
>>>>>> forma que ficou e de um efeito colateral. As vezes uma das cópias do app dá
>>>>>> algum erro e cai, só que os registros do lote dele ficam lá com o PID
>>>>>> gravado na coluna, então as outras cópias não mexem mais com esses
>>>>>> registros e eles ficam indefinidamente pendentes.
>>>>>>
>>>>>> Alguma dica de como fazer algo "mais elegante" e "seguro"?
>>>>>>
>>>>>> Para adiantar:
>>>>>> 1. Tem que ser MySql. Posso mexer na tabela a vontade.
>>>>>> 2. O processamento não tem como ser mexido.
>>>>>>
>>>>>>
>>>>>> [...]'s
>>>>>>
>>>>>> Marcio
>>>>>>
>>>>>> ========================================
>>>>>> ########### Campanha Ajude o Marcio! ###########
>>>>>> http://sosmarcio.blogspot.com.br/
>>>>>> http://www.vakinha.com.br/VaquinhaP.aspx?e=195793
>>>>>> ========================================
>>>>>>
>>>>>> =begin disclaimer
>>>>>>    Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>>>>>>  SaoPaulo-pm mailing list: SaoPaulo-pm at pm.org
>>>>>>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
>>>>>> =end disclaimer
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Saravá,
>>>>> Renato CRON
>>>>> http://www.renatocron.com/blog/
>>>>> @renato_cron <http://twitter.com/#!/renato_cron>
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Saravá,
>>>> Renato CRON
>>>> http://www.renatocron.com/blog/
>>>> @renato_cron <http://twitter.com/#!/renato_cron>
>>>>
>>>> =begin disclaimer
>>>>    Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>>>>  SaoPaulo-pm mailing list: SaoPaulo-pm at pm.org
>>>>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
>>>> =end disclaimer
>>>>
>>>>
>>>
>>
>> =begin disclaimer
>>    Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>>  SaoPaulo-pm mailing list: SaoPaulo-pm at pm.org
>>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
>> =end disclaimer
>>
>>
>
>
> --
> André Garcia Carneiro
> Software Engineer
> (11)982907780
>



-- 
André Garcia Carneiro
Software Engineer
(11)982907780
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20130924/99f7ce91/attachment.html>


More information about the SaoPaulo-pm mailing list