Estou fazendo um sistema que importa 10 arquivos diferentes, com tamanhos diversos.
O que estou fazendo:
uma thread para os 10 tipos.
Queria saber se é melhor fazer 1 thread, para cada um, pois não precisa de ordem.
Estou fazendo um sistema que importa 10 arquivos diferentes, com tamanhos diversos.
O que estou fazendo:
uma thread para os 10 tipos.
Queria saber se é melhor fazer 1 thread, para cada um, pois não precisa de ordem.
Depende, se quiser paralelizar o processo para ser um pouco mais rápido, sim!
Caso contrário não teria necessidade!
É só uma opnião, precisa avaliar o que seria melhor no seu cenário!
Acho que vai depender muito de quais ações/verificações que a importação faz para cada arquivo. Eles gravam na mesma tabela? A ideia de fazer em mais de uma thread eh por problema de performance?
1 thread para todos já estou fazendo.
Meu pensamento é este. Ser um pouco mais rápido e independente.
Dos 10 arquivos um grava na mesma tabela. Mas todos eles pesquisam em tabelas que outros já importaram
Exemplo
arquivo 1, importa produto do lugar a, para a tabela de produto
arquivo 2, importa produto do lugar b, para a tabela de produto
arquivo 3, importa produto do lugar c, para a tabela de produto
arquivo 4, importa produto do lugar d, para a tabela de produto
arquivo 5, importa ordem de compras dos produtos do lugar a, para a tabela de ordem de compras.
mas o produto tem que estar na tabela produto, então ele faz uma consulta na tabela de produto.
arquivo 6, importa ordem de compras dos produtos do lugar b, para a tabela de ordem de compras. mas o produto tem que estar na tabela produto, então ele faz uma consulta na tabela de produto.
arquivo 7, importa ordem de compras dos produtos do lugar c, para a tabela de ordem de compras. mas o produto tem que estar na tabela produto, então ele faz uma consulta na tabela de produto.
arquivo 8, importa ordem de compras dos produtos do lugar d, para a tabela de ordem de compras. mas o produto tem que estar na tabela produto, então ele faz uma consulta na tabela de produto.
As validações são estas
Sistema em qual Linguagem?
JAVA - Spring
Que tipo de importação é feita, cite exemplos?
Produtos e ordem de compras de alguns marktplaces
Thread para todos vai depender muito porque falta informações, como tamanho, tipo de importação, linguagem, etc etc etc
Os arquivos são de tamanhos diversos (100 kb a 5 megas(limite)), eles podem utilizar a qualquer momento e por vários usuários. Pelo que sei são 10, que vão fazer este tipo de ação. Podendo ser ao mesmo tempo ou não.
Não entendi o que vc quis dizer com tipo de importação…
Estou fazendo com um endpoint e umthread.
Mas pensei em cada um ter um endpoint e um thread.
Por isso coloquei aqui.
Na verdade são 19 arquivos
Cada arquivo você diz? se for eu acharia inviável, porquê a medida em que isso fosse crescendo seria necessário sempre criar um novo endpoint para o novo arquivo.
Se a divisão for por tipo aí seria legal, por exemplo: um endpoint para arquivos de carga de produtos e outro para arquivos de carga de ordens de compra.
Porém não sei se faria sentido essa abordagem.
Pelas validações, não vejo problemas em paralelizar as importações do produto.
Já esses outros tb podem ser paralelizados, porém, logo após a execução dos arquivos de 1 a 4.
Mas vai depender muito da implementação para ter algum ganho, pois se todos os registros dos arquivos 5 em diante forem armazenar na mesma tabela, tem que ver como será o lock feito pelo banco, pois poderá ser um gargalo.
Nesses casos de importação, acho uma boa fazer o processamento em batch antes de partir para o uso em várias threads.
foi o que imaginei
entendi.e este ponto vc esta certo
Mas imaginei as vezes um endpoint, e para cada tipo de arquivo um thread diferente, assim o processo que iniciou do endpoint acaba rápido e inicializa um novo thread, para o arquivo a ser importado e assim fazer suas validações.
Se esse processo realmente for muito demorado, cria um schedule do spring pra processar esses arquivos. A requisição web só deve receber os arquivos. É ilusão esperar que o tempo se divida, sempre há gargalos inevitáveis. Pra escalar de verdade, seriam n servidores recebendo as requisições.