Jump to content
Sign in to follow this  
killercode

Processamento de Dados Single e Multi Threaded

Recommended Posts

killercode

Boas pessoal,

Tenho um problema nas mãos que vai ser bicudo de resolver. Vou escrever aqui o que pretendo fazer e espero conseguir algumas respostas com ideias ou soluções para o problema

estou a fazer um programa para conversão de registos.

Para ja as classes que tenho são

Module

-InputModule - Le os registos de uma datasource (File, Database, Socket, etc)

-TransformModule - Faz manipulação e transforma os dados para outro formato

-OutputModule - Escreve os registos numa datasource (File, Database, Socket, etc)

ModuleController - Controla a execução dos modulos

A ideia é os modulos podem ser SingleThread ou Mutithread

SingleThread - Dados em que sou obrigado a tratar de modo sequencial, se antes de um modulo single thread estiver a ser processado um modulo multithread devo esperar que este termine

Multithread - Posso ir buscar logo os dados que ja foram disponibilizados pois não interessa a ordem em que estão. No caso multithread quero que a cada 300 registos disponiveis ele crie uma thread nova.

O Problema: Como gerir os modulos multi-thread e como passar a informaçaõ de um lado para o outro!

Aceitam-se ideias e sugestões.

Obrigado ;)

EDIT: esqueci-me de mencionar que os modulos são carregado numa array para sua posterior utilização :)

Share this post


Link to post
Share on other sites
M6

Apresentas um problema clássico de migração de dados (ETL) que, por "acaso", é a minha especialidade :thumbsup:

Pelo que compreendi do teu problema este não é propriamentre de ETL mas sim de orquestração.

Os processos multithread devem ser usados apenas quando não existem dependências, ou seja o processo é autónomo e não depende de mais nada a não ser da existência dos dados origem a transformar.

Se queres fazer lotes de 300 registos, o processo "pai" move esses registos, ou indentifica-os por uma chave única, e arranca uma thread para executar a transfornação desse trabalho, no final a thread termina e tens os dados transformados.

Se optaste por mover os dados, então eles já não estão na tabela/ficheiro/etc de origem e não tens de te preocupar mais, caso contrário tens de os identificar como tendo sido já migrados de forma a que não seja, por engano, seleccionados para serem de novo transformados.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
killercode

Thanks pela resposta hoje resolvi o problema!

criei uma classe module controller em que cada modulo é instanciado e colocado numa lista. essa lista por sua vez vai ser percorrida por um iterator para meter cada modulo numa thread e essa thread é responsavel por verificar se o modulo anterior esta a correr e recolher os dados que estão na pool de records....

essas threads de controlo estão a executar mais umas regras como por exemplo se o modulo actual é multithreaded ou não se este não for espero que todos os dados da thread anterior sejam processados caso contrario começo logo a recolher os dados em bloco inferiores ou iguais a 300!

Tenho testado varias combinações e tenho adicionado alguns thread.sleep  com valores random para ver o comportamento dele com diferentes tempos de execução e tudo esta a ser executado na perfeição :thumbsup:

Share this post


Link to post
Share on other sites
M6

Parece-me uma solução demasiado complexa para um problema simples, mas também só conheço o problema pela tua descrição...


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.