[SP-pm] Bloqueando registros para processamento

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


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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20130924/7186c079/attachment-0001.html>


More information about the SaoPaulo-pm mailing list