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