Otimização de parse de log

3 respostas
Link_pg

Olá!

Estou fazendo o parse de um arquivo de log e através de uma expressão regular, estou inserindo grupos da expressão em colunas de uma tabela no banco de dados. Cada linha no arquivo é um registro no banco. No começo a inserção é rápida, até mais ou menos uns 2000 registros, quando passa disso começa a ficar lento. Até uns 18000 é aceitavel, mas quando passa disso começa a ficar beem lento… o arquivo aqui tem por volta de 38000 linhas… alguém ai sabe algum macete para otimizar a leitura e a inserção no banco?

Abraços

3 Respostas

thiagoh

Amigo, o que muito provavelmente está acontecendo eh que voce esta entupindo a memória da maquina com dados.

Há difersas soluções, voce pode quebrar o montante de dados em arquivos menores e processá-los separadamente.

voce pode também fornecer mais memória para a aplicação, rodando sua aplicação num PC sem muitos processos para roubar memoria RAM. Mas esta solução não é das mais viáveis pois so vai protelar a falta de memória RAM.

Voce pode também otimizar as inserções no banco de dados, removendo o auto-commit simplesmente pondo um Begin; no inicio e um Commit; depois de um bolo de Insert Into. Isso vai agilizar bastante a sua aplicação.

ignacio83

Se estiver utilizando hibernate ou JPA?

Se a resposta for sim, você pode fazer de n em n registros:

...
if(i%1000)
{
      .flush(); //Descarrega os comandos armazenados (insert,update,select...)
      .clear(); //Limpa o cache
}
...
Link_pg

No caso eu estou com o auto-commit false, e tenho um numero configurável de executeUpdate num arquivo de properties (Ex.: a cada 1000 linhas, executa um commit). O caso é que nem tudo estava sendo logado no textArea, e estava acontecendo um NumberFormatException que travava o processo e não estava sendo logado…

Obrigado!

Criado 20 de janeiro de 2009
Ultima resposta 20 de jan. de 2009
Respostas 3
Participantes 3