Muitos objetos em memória.  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
marcelo_mococa
Virtual Machine Man
[Avatar]

Membro desde: 03/03/2005 10:03:32
Mensagens: 622
Localização: São Paulo
Offline

Pessoal,

Gostaria de ouvir a opinião de vocês.

Tenho uma consulta na base que pode retornar uns 500 mil registros. Depois pego estes registros e escrevo em um arquivo posicional. Este código é um legado e está bem confuso. Tem tudo em uma classe só. Gostaria de refatorá-lo e estou com uma dúvida.

Por padrão, meus Repositórios retornar entidades de domínio. Neste caso, uma lista de entidades. A minha dúvida é: Existe uma forma melhor de trabalhar com grandes quantidades de objetos retornados da base? Estou preocupado com a performance deste processamento. Alguém já passou por algo semelhante? Qual foi a solução utilizada? Estou pensando em utilizar ActiveRecord, mas gostaria de ouvir opiniões.

abraços
Marcelo

Marcelo Madeira - TCS
SCJP 1.5
SCWCD 1.4
blog

thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

500 mil registros? Se cada registro ocupar 400 bytes na memória (uma estimativa muito otimista) você precisaria de 200 megabytes de memória só para esses objetos. Não se esqueça que cada caracter de uma string ocupa 2 bytes. Você tem memória suficiente para rodar o tal programa?
[WWW]
fantomas
GUJ Master
[Avatar]

Membro desde: 24/04/2008 16:10:55
Mensagens: 1533
Localização: Terra (maior parte do tempo)
Offline

Eu também fiquei curioso!

Você disse que o código já existe, logo, qual o real objetivo da refatoração?

É atingir melhor performance?

flws


marcelo_mococa
Virtual Machine Man
[Avatar]

Membro desde: 03/03/2005 10:03:32
Mensagens: 622
Localização: São Paulo
Offline

Então,

O código atual funciona da seguinte forma:

É feita a consulta na base, e o arquivo é gerado percorrendo o resultset. Portanto, este problema não ocorre hoje.

A idéia da refatoração é desacoplar o código para permitir uma manutenção evolutiva.

Marcelo Madeira - TCS
SCJP 1.5
SCWCD 1.4
blog

fantomas
GUJ Master
[Avatar]

Membro desde: 24/04/2008 16:10:55
Mensagens: 1533
Localização: Terra (maior parte do tempo)
Offline

Você pretende / está utilizando algum ORM nesta refactoring?

flws
marcelo_mococa
Virtual Machine Man
[Avatar]

Membro desde: 03/03/2005 10:03:32
Mensagens: 622
Localização: São Paulo
Offline

Não...
Utilizaremos apenas JDBC.

Marcelo Madeira - TCS
SCJP 1.5
SCWCD 1.4
blog

fantomas
GUJ Master
[Avatar]

Membro desde: 24/04/2008 16:10:55
Mensagens: 1533
Localização: Terra (maior parte do tempo)
Offline

Então...por conta da quantidade enorme de dados envolvida talvez não seja muito bom mesmo utilizar um ORM. Talvez fosse uma boa idéia dar uma olha no suporte JDBC oferecido pelo Spring, talvez dê para você montar um código um pouco mais limpo e elegante sem prejudicar a perfomance.

Fora isso acho que só vendo alguma parte de código para ver se surge alguma idéia diferente, algum pattern ou algo assim.

flws

sulito
Virtual Machine Man

Membro desde: 23/11/2009 07:15:59
Mensagens: 608
Offline

Estou a reviver este topico, porque eu tambem tenho uma duvida identica, Sera que para recuperar muitos dados numa consulta vale a pena usar o jdbc ou o hibernate?? qual é o que tem maior performance quando se trata de recuperar 1 milhão de dados por exemplo???

LPI-101
fantomas
GUJ Master
[Avatar]

Membro desde: 24/04/2008 16:10:55
Mensagens: 1533
Localização: Terra (maior parte do tempo)
Offline

Oi Sulito!

1 milhão de registros?

É muita coisa portanto indicaria JDBC.

Mas pare para pensar um pouco, que é que irá solicitar 1 milhão de registros de uma vêz? É nesta hora que a gente para e começa a fazer uma analise mais detalhada do problema para verificar se realmente é necessário tal tipo de solução.

[]'s
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team