Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Threads + DB #17

Open
marciorp-br opened this issue Feb 18, 2013 · 14 comments
Open

Threads + DB #17

marciorp-br opened this issue Feb 18, 2013 · 14 comments

Comments

@marciorp-br
Copy link

Executando processos simultâneos com acesso a dados (r/w).

@ghost ghost assigned edenc Feb 18, 2013
@edenc
Copy link
Member

edenc commented Feb 19, 2013

Esse artigo é bem simples de fazer, é só ilustrar como usar https://metacpan.org/module/Parallel::ForkManager e $dbh->clone

@marcioferreira
Copy link

Penso em fazer um artigo com "threads + wherever", DB seria uma das abordagens =)

@ghost ghost assigned marcioferreira Feb 19, 2013
@marciorp-br
Copy link
Author

Quando sugeri, pensei em algo que abordasse como rodar várias tarefas simultaneamente lendo e atualizando dados em MySql, p.e..
Tenho uma situação que dependendo da quantidade de registro pendentes de processamento em uma tabela MySql, tenho que separa-los por grupo para processar mais rápido. Como sou muito fraco em Perl, a forma que resolvi foi fazendo um app que fica lendo a tabela de 30 em 30 segundos, e dependendo da quantidade de registros, ele chama outro app várias vezes, passando para cada um o registro inicial e final que ele deverá processar. Sei que é uma gambiarra, mais não consegui fazer de forma mais elegante.

@marcioferreira
Copy link

Estou pensando em cobrir as possibilidades de trabalho de forma paralela. O módulo sugerido pelo Eden é o que estou mais familiarizado, mas vou tratar de outras formas de faze-lo.

@renatocron
Copy link
Member

Marcio RP (eheh) nesse caso do MySQL (ou outro banco) deve-se usar indexs e bancos slaves.

mas a logica geralmente é:

$total_registros = 100;
$meio = $total_registros / 2;
$pid = fork;

conecta no banco();
if ($pid == 0 ){ query_menor_metade(); write_no_nmap; exit; }
else { query depois da metade }

waitpid($pid, 0);
le_do_do_nmap;
junta os resultados;

teoricamente o banco rodaria as duas querys ao mesmo tempo, e entregaria. O conceito de verdade se chama map/reduce e pode ser aplicado em vários cenarios. (map: dividir em vários, reduce: juntar os pedacinhos)

@renatocron
Copy link
Member

Lendo novamente,
" dependendo da quantidade de registro pendentes de processamento " talvez o artigo de redis seja util nesse caso, ou até mesmo o do Gearman http://sao-paulo.pm.org/equinocio/2010/set/5

@marcioferreira
Copy link

@marciorp-br, lendo melhor seu comentário... parece que precisa dp conceito de publisher/subscriber. O artigo de Redis vai cubrir isso, aí você junta ao artigo de threads.

Pelo que entendi, você quer trabalhar em call back do insert no seu mysql, é isso?
Se sim, pense em migrar de tecnologia, um redis pode ser uma boa opção.

@edenc
Copy link
Member

edenc commented Feb 23, 2013

Cuidado pra não fugir muito do tema sugerido, se você quiser escrever um artigo sobre Redis, ótimo, você pode escrever isso num outro artigo, e será bem-vindo. Porém o OP pediu especificamente para tratar de mysql, então caso você não for abordar mysql, deixa outra pessoa escrever.

@edenc
Copy link
Member

edenc commented Feb 23, 2013

Mudei o nome do artigo de volta pra sugestão original, pra não ter risco de fugirmos do tópico sugerido.

@marciorp-br
Copy link
Author

Renato, Marcio e Eden, foi apenas uma sugestão para "tentar" resolver uma
dificuldade que já tive. Conheço muito pouco de Perl, então talvez nem eu
saiba o que quero ... rsrsrsrs
Tenho que obrigatoriamente usar MySql por outras questões, então fiz dessa
forma que descrevi, mesmo imaginando não ser a forma mais elegante. O app
que fica lendo a tabela chega a chamar mais de 30 cópias do outro app que
processa os blocos de registros por uma questão de desempenho e dá forma
que tenho que interagir com o Asterisk. Funciona, mais volta e meia dá pau
e a manutenção é complicada.
Infelizmente eu não posso postar o código porque não é meu, por questão de
contrato pertence a empresa.

@marcioferreira
Copy link

@edenc, mudei o tópico do artigo porque não tratar exclusivamente de Threads + DB, assim como escrevi no primeiro comentário

@edenc
Copy link
Member

edenc commented Feb 25, 2013

OK, você vai escrever outro artigo ou vai escrever sobre o tema proposto pelo OP? Caso queira escrever um com um tema diferente, vou abrir esse pra outro voluntário escrever.

@marcioferreira
Copy link

@edenc como eu já disse, vou repetir: vou escrever de forma mais abrangente englobando inclusive DB. Se você quer um artigo estrito ao que foi sugerido, fique a vontade porque já liberei esse issue

@marciorp-br
Copy link
Author

Calma ai pessoal, não quero causar desentendimentos ... eu dei apenas uma
sugestão ... :-)
Ficarei muito grato ao(s) autor(es) pelo conteúdo que puderem compartilhar.

# for free to join this conversation on GitHub. Already have an account? # to comment
Projects
None yet
Development

No branches or pull requests

4 participants