Leitura eficiente de arquivo

4 respostas
G

Saudações,

Estou precisando ler um arquivo texto com 5 milhões de registros. Tal arquivo possui um layout baseado em posições de colunas. Por exemplo: as 20 primeiras colunas indicam o identificador da linha.
Enfim, estou trabalhando num projeto, onde o legado utiliza utl_file para ler UMA LINHA POR VEZ, realizar uma série de validações e, por fim, persistir no banco.
Existe alguma artifício no java onde possa realizar a leitura de todo o arquivo de uma tacada só e, talvez, armazená-lo em memória em alguma estrutura para que sejam feitas as validações de forma iterativa.
Grato,
Bruno Giminiani

4 Respostas

M

Olá!

Não sei sua necessidade real, mas, apenas para sugerir, por que não armaneza e processa esse arquivo diretamente no banco de dados?
Se você utiliza o Oracle, existe o SQL-LOADER, para carregar arquivos texto que é excelente.

Digo isso pois passei por um problema parecido, tinha um sistema que lia um arquivo texto diariamente com 1 milhão de linhas e era um processo muito lento.

Fica aí a sugestão.

Mikhas

Carregar tudo na memória é roubada heim cara, ainda mais se tiver milhões de linhas mesmo.

Bem… eu tentaria 2 abordagens diferentes:

  1. Leia uma linha, mapeie ela em um POJO/BEAN, faça as validações e persista por final. Lê a proxima linha, mapeia, valide, persista sucessivamente…

ou…
2. Utilize um ETL. Eu só conheço e uso o Pentaho.

G

Olá!!

Enfim, por uma definição, que ultrapassa minha alçada, a validação deverá ser feita em pl-sql. A procedure tem como objetivo realizar validações em arquivo texto( validação de tamanho de campos, se houve entrada numérica no campo texto, se o campo esperado é um email, etc. ). O grandes problemas consistem de performance e escalabilidade, visto que se trata de arquivos que, de cara, começaram com 50.000.000 de registros. O arquivo chega via ftp e é salvo em um diretório disponível.
O que é mais eficiente?

  • Ler linha por linha; realizar as devidas validações e, em seguida, gravar no banco ou
    Gravar tudo em uma tabela temporária e realizar a iteração de validação em uma tabela?
  • Existe alguma forma mais eficiente de ler arquivo em pl-sql ao invés de ler linha a liha?

Obrigado,
Giminiani.

juniorsatanas

Resolveu ?

Criado 3 de novembro de 2010
Ultima resposta 23 de dez. de 2011
Respostas 4
Participantes 4