| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/11/2010 16:19:27
|
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
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/11/2010 16:52:20
|
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/11/2010 16:53:13
|
Mikhas
Virtual Machine Man
![[Avatar]](/images/avatar/4388a23da67b154b780b78dd7ea4636e.jpg)
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/11/2010 15:57:38
|
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 23/12/2011 11:11:14
|
juniorsatanas
GUJ Master
![[Avatar]](/images/avatar/e80d4e20bea58e20d925e45e6fb7aab8.jpg)
Membro desde: 20/05/2007 01:08:24
Mensagens: 1864
Localização: web2ajax@gmail.com
Offline
|
Resolveu ?
|
Cheque Mate em 6 |
|
|
 |
|
|
|
|