Leitura eficiente de arquivo  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
Giminiani
Debugger

Membro desde: 19/02/2008 15:40:37
Mensagens: 67
Offline

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
[Email]
molmedo
JavaChild

Membro desde: 29/05/2007 21:32:50
Mensagens: 101
Localização: São Paulo
Offline

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.
[ICQ]
Mikhas
Virtual Machine Man
[Avatar]

Membro desde: 17/06/2008 11:10:50
Mensagens: 677
Localização: São Paulo
Offline

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.

Refractor 1.6 - Easy reflection framework
Agora muito mais rapido!
Raze - The fastest CSS selector engine




[Email] [MSN]
Giminiani
Debugger

Membro desde: 19/02/2008 15:40:37
Mensagens: 67
Offline

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.
[Email]
juniorsatanas
GUJ Master
[Avatar]

Membro desde: 20/05/2007 01:08:24
Mensagens: 1864
Localização: web2ajax@gmail.com
Offline

Resolveu ?

Cheque Mate em 6
[WWW] [Yahoo!] aim icon [MSN] [ICQ]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team