| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/07/2007 11:27:13
|
Giulliano
GUJ Master
![[Avatar]](/images/avatar/7f5a17b792b687fc4c227a5c5e569dd8.jpg)
Membro desde: 14/11/2006 19:29:38
Mensagens: 1627
Localização: São Paulo
Offline
|
Bom Dia Galera !!!
Gostaria da opnião e talvez até mesmo a ajuda de alguém...
Problema1 : preciso desenvolver uma aplicação Web que faça upload de arquivos txt grandes para base de dados.
Problema2 : o arquivo é delimitado por largura fixa, e eu só sei usar delimitadores.
Hoje eu tenho uma aplicação que sobe, lê e faz os inserts na tabela, porém o arquivo é delimitado por ";" e segundo que os arquivos tem no máximo 18mb....
Alguém teria uma dica ????
Valews
|
Oracle Certified Master, Java EE 5 Enterprise Architect
Oracle Certified Professional Java Programmer
GiuLLianO MoRRoNi
<UnTouChAbLe> |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/07/2007 11:55:00
|
luciene.silva
JavaChild
Membro desde: 10/01/2007 00:54:33
Mensagens: 120
Offline
|
Pelo título do seu post, você está estourando a memória ao ler esses arquivos grandes.
Dê uma olhada em http://www.guj.com.br/posts/list/43775.java e http://www.guj.com.br/posts/list/17893.java.
Se o arquivo tem tamanho fixo, vc irá ler blocos de dados..
Tipo, leia cada linha do arquivo e guarde numa String. Depois vc vai dando substring. Vc sabe exatamente onde começa e onde termina cada campo.
|
Quando tiver medo de fazer uma pergunta, lembre-se: "Antes ser um idiota por 15 minutos do que ser um a vida inteira"
Blog WebGP - Flex, Magento, Java, Django e etc |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/07/2007 12:18:05
|
Giulliano
GUJ Master
![[Avatar]](/images/avatar/7f5a17b792b687fc4c227a5c5e569dd8.jpg)
Membro desde: 14/11/2006 19:29:38
Mensagens: 1627
Localização: São Paulo
Offline
|
Luciene...eu dei uma olhada nesse tópico faz umas duas semanas...
Até fiz o teste aumentando a maquina virtual...mas minha empresa possui 17.000 usuários....ou seja não posso contar que toda vez q alguém precisar subir um arquivo ele saiba dar o tunning na máquina...
vou tentar ler linha por linha e fazer o substring....
obrigado.
|
Oracle Certified Master, Java EE 5 Enterprise Architect
Oracle Certified Professional Java Programmer
GiuLLianO MoRRoNi
<UnTouChAbLe> |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/07/2007 12:19:51
|
maquiavelbona
JWizard
![[Avatar]](/images/avatar/24bea84d52e6a1f8025e313c2ffff50a.jpg)
Membro desde: 29/06/2006 09:06:51
Mensagens: 2447
Localização: São Paulo - SP
Offline
|
Já pensou em trabalhar com NIO?
Até!
|
----------------------------------------------------------------
"Within a few years a simple and inexpensive device, readily carried about, will enable one to receive on land or sea the principal news, to hear a speech, a lecture, a song or play of a musical instrument, conveyed from any other region of the globe. "
Nikola Tesla - A means for furthering Peace (1905)
"Gedanken ohne Inhalt sind leer, Anschauungen ohne Begriffe sind blind."
Immanuel Kant - Kritik der reinen Vernunft (1781) |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/07/2007 12:31:15
|
Giulliano
GUJ Master
![[Avatar]](/images/avatar/7f5a17b792b687fc4c227a5c5e569dd8.jpg)
Membro desde: 14/11/2006 19:29:38
Mensagens: 1627
Localização: São Paulo
Offline
|
Putz cara...essa dica valeu ouro...
espero q essa API consiga melhorar o desempenho da app...
valews
|
Oracle Certified Master, Java EE 5 Enterprise Architect
Oracle Certified Professional Java Programmer
GiuLLianO MoRRoNi
<UnTouChAbLe> |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/07/2007 13:00:42
|
Edson Watanabe
Debugger
Membro desde: 05/07/2007 12:38:12
Mensagens: 58
Localização: SP
Offline
|
Normalmente quando os arquivos são grandes é interessante a aplicação web criar um arquivo temporário, até para poder efetuar o "restart" caso necessário. Não guarde 300 MB em memória - você pode ter isso tudo no seu tocador de MP3, mas normalmente não tem tudo isso disponível no seu servidor, só para você. (Você pode ajustar algumas configurações de memória no Java, mas isso só adia o problema.)
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/07/2007 13:07:39
|
fre_d
Java Ninja
Membro desde: 13/06/2007 17:42:02
Mensagens: 259
Localização: Lages - SC
Offline
|
Porque você não usa bcp ou algum utilitario do banco ? Fazer inserts gera log no banco e fica mais lento.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/07/2007 13:14:00
|
Edson Watanabe
Debugger
Membro desde: 05/07/2007 12:38:12
Mensagens: 58
Localização: SP
Offline
|
Ou seja, sua aplicação tem de fazer as seguintes coisas:
- Obter o arquivo que foi subido (upload) e gravar um arquivo temporário;
- Pegar esse arquivo temporário e transformá-lo em outro, que seja apropriado para o utilitário do banco que é adequado para "bulk insert" (por exemplo, bcp, no caso do MS SQL Server, ou o SQL*Loader, no caso do Oracle), como foi sugerido pelo fre_d.
300 MB é muita coisa e leva um bom tempo para processar, mesmo com "bulk load" ou "bulk insert".
Em uma aplicação Web eu mostraria uma página com uma mensagem do tipo "O seu arquivo foi recebido pelo servidor. O processamento está sendo feito; consulte esta página para ver o estado do processamento"* e teria uma outra página que permitisse verificar se o utilitário acabou ou não de processar o serviço.
* Não com essas palavras técnicas todas; é que estou falando em jargão para VOCÊ entender melhor.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/07/2007 13:25:08
|
Giulliano
GUJ Master
![[Avatar]](/images/avatar/7f5a17b792b687fc4c227a5c5e569dd8.jpg)
Membro desde: 14/11/2006 19:29:38
Mensagens: 1627
Localização: São Paulo
Offline
|
fre_d wrote:Porque você não usa bcp ou algum utilitario do banco ? Fazer inserts gera log no banco e fica mais lento.
Então cara vc poderia ser mais específico na utilização de bcp...nunca ouvi falar...
Esses arquivos txt são os dados q precisamos carregar para o pessoal do telemarketing poder trabalhar...então cada supervisor de cada depto (são muitos) podem subir arquivos com valores para o banco...
e realmente ler 300mb em memória no java é inviável
|
Oracle Certified Master, Java EE 5 Enterprise Architect
Oracle Certified Professional Java Programmer
GiuLLianO MoRRoNi
<UnTouChAbLe> |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/07/2007 13:28:32
|
Edson Watanabe
Debugger
Membro desde: 05/07/2007 12:38:12
Mensagens: 58
Localização: SP
Offline
|
Qual é o banco de dados usado?
Você não disse qual o banco.
Cada banco tem um utilitário diferente, e trabalha de jeito diferente.
Mas em linhas gerais, esses utilitários funcionam como se você quisesse dar um monte de INSERTS em alguma tabela, a partir de dados lidos de um arquivo em formato texto e em algum formato que está especificado na documentação do banco. Para mais detalhes, leia a documentação do seu banco.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/07/2007 13:32:24
|
Giulliano
GUJ Master
![[Avatar]](/images/avatar/7f5a17b792b687fc4c227a5c5e569dd8.jpg)
Membro desde: 14/11/2006 19:29:38
Mensagens: 1627
Localização: São Paulo
Offline
|
eu uso MS-SQL
vou dar uma busca na net pelo assunto...
por hora estou achando melhor não fazer o upload do arquivo e sim deixar implícito na aplicação que o arquivo deve estar no "C:/" com nome arquivo.txt
Acho q isso já melhora a performance de leitura
|
Oracle Certified Master, Java EE 5 Enterprise Architect
Oracle Certified Professional Java Programmer
GiuLLianO MoRRoNi
<UnTouChAbLe> |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/07/2007 16:46:22
|
Edson Watanabe
Debugger
Membro desde: 05/07/2007 12:38:12
Mensagens: 58
Localização: SP
Offline
|
http://www.databasejournal.com/features/mssql/article.php/3663631
|
|
|
 |
|
|