Muitos objetos em memória

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

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?

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

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.

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

flws

Não…
Utilizaremos apenas JDBC.

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

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???

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