Boa Tarde pessoas do Forum,
Hoje eu tenho um programa funionando normalmente, porem demora muito para fazer a rotina completa.
O programa acessa atravez de RMI um outro servidor onde ele faz a leitura linha a linha do arquivo e me retorna um arraylist com cada uma das linhas deste arquivo.
esta parte até que está rápida cerca de 10 segundos para obter um arquivo com 200500 linhas (25.3 MB).
A lentidão ocorre quando estou validando as linhas e inserindo no banco.
cada linha possue 10 campos separados por ponto e virgula (;),para fazer a verificação eles são divididos pelo split() das strings, entre os campos existem 3 campos data que verifico se são datas reais e estão no formato DD/MM/AAAA, dois campos numericos que eu eu verifico se realmente são numeros (um deles eu faço consistencia se pertence à um grupo de 20 possiveis, dentro de um FOR e quando pertence é retornado o verdadeiro) e os demais são campos texto que só verifico se estão preenchidos ou não.
Após essas verificações os dados são inseridos em duas tabelas de um banco oracle (uma de registros e outra com os logs, gravando 1 se deu certo o registro e caso algum dos campos apresente erros são gravados os erros apresentados e a data que foi incluida esta linha) detalhe: o banco esta em uma terceira maquina
Agora que eu apresentei tudo que é feito, gostaria de saber se o preocessamento completo(o tratamento dos campos e a inclusão nas tabelas) de 8 linhas em média por segundo é um processamento lento, ou se esse processamento poderia ser mais rapido.
caso seja um processamento um tanto quanto lento, quais seriam as dicas que vocês poderiam dar para que fosse melhorado?
Duvida sobre performance Leitura arquivo txt
3 Respostas
D
Boa tarde.
Para esse tipo de problema, algo que poderia te ajudar muito é utilizar Threads. para realizar esta tarefa.
Porém vale lembrar que se tratando do banco de dados oracle você deve tomar cuidado com a quantidade de threads que você vai abrir para não estourar o número de conexões.
Já fiz algo parecido a isso que você descrevel, e o resultado com threads foi muito bom.
Atte.
E
além de usar threads, é legal usar o addBatch do PreparedStatement.
Dá uma olhada no kettle, pentaho data integrator, que isso que você quer fazer ele faz bem mais prático.
Use praticas otimizadas na programação JDBC que com certeza vc vai otimizar isso.
- Reuse objetos connections
- Use comandos SQL pre-compilados
- Reuse objetos statements ja pre-compilados…
- Use operações em BATCH (normalmente é oque é mais vai ajudar ai)
E por ai vai…
Criado 25 de novembro de 2011
Ultima resposta 25 de nov. de 2011
Respostas 3
Participantes 4
Alura Sistemas operacionais: entenda seu conceito e suas funções Descubra o que são sistemas operacionais, suas funções e tipos. Aprenda tudo de forma clara e objetiva. Não perca tempo!
Casa do Codigo Orientacao a Objetos: Aprenda seus conceitos e suas... Por Thiago Leite e Carvalho — Casa do Codigo