Sistema que importar 10 arquivos diferentes

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!

1 curtida

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 curtida
  • Sistema em qual Linguagem?
  • Que tipo de importação é feita, cite exemplos?
  • Thread para todos vai depender muito porque falta informações, como tamanho, tipo de importação, linguagem, etc etc etc
1 curtida

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.

1 curtida

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.

1 curtida

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.

1 curtida