ArrayList ou buscar direto no Banco?

4 respostas
S

Olá pessoal, o que é mais interessante, carregar os dados do banco pro ArrayList e daí usar ex: buscar registro, passar pro próximo registro, etc, ou buscar direto no banco, sem carregar pro arrayList?

Atc,
Fernando.

4 Respostas

renamed

buscar

71C4700

Acredito que depende muito da situação.

Em uma, os dados vindos do banco são em pequena escala. Neste caso armazenar e depois filtrar seria aceitavel.

No segundo caso, imagine que do banco virão mil ou milhoes de registros, teriamos um certo desgaste em filtar isso na aplicação, então, seria uma boa opção, realizar esta consulta especifica no banco, pois já retornaria menos registros.

Na minha humilde opinião, sempre deixe o banco cuidar das suas responsabilidades. Apesar de hoje com os ORM’s muitas coisa estarem mudando e os banco passando a ser meros repositorios de dados, mas isso são outros quinhentos…

Deixa o banco cuidar do que diz respeito as suas resposabilidades, implica em realizar varias consulta especificas e apenas executa-las da aplicação, lógico, volto a repetir, minha opinião.

Att…

S

olha eu tambem acho que o melhor sempre é deixar o banco de dados fazer a parte dele, porque imagina com 444 milhoes de registos, a Java Virtual Machine podera dar um erro ( exception ) parecido com outOfMemory, porque se os dados forem carregados no arrayList ai ficarão esses
444 milhoes de registos em memoria na Java Virtual Machine, e pensando bem os SGBD (sistemas gerenciadores de base de dados) tem mecanismos propios para trabalhar e gerir grande volumes de dados, eu axo que devemos dar a cesar o que é de cesar ( dar os dados ao banco de dados ) e dar a java a logica da aplicação.
Mas eu gostaria de ouvir a opinião dos programadores mais experientes do GUJ,

sergiotaborda

santos.fernando:
Olá pessoal, o que é mais interessante, carregar os dados do banco pro ArrayList e daí usar ex: buscar registro, passar pro próximo registro, etc, ou buscar direto no banco, sem carregar pro arrayList?

A resposta depende do que vc vai fazer com os dados e de quantos registros são esperados.
Se vc está listando registros para mostrar numa listagem ou vitrine ( lista de produtos num e-commerce) ou list de todos os produtos no backoffice vc vai querer poder paginar e só trazer de X em X. Tambem para relatórios é normalmente necessário bastantes dados.

Se vc está fazendo uma pesquisa para fazer algum processo, ou vc está lendo um registro do modelo, por exemplo, ler os itens de um pedido , então vc vai querer ter todos na lista. Isto tb é verdade se vc quiser fazer operações sobre a lista como removeAll ou retainAll.

Para o primeiro cenário vc usa um padrão chamado Fastlane Reader (Leitor via rápida). Este é um objeto com uma certa interface - normalmente não uma coleção,mas semelhante - que vem da camada mais baixa. Quando este objeto é usado na camada mais alta (na jsp , por exemplo) ele está na realidada usando o ResultSet directamente criando um objeto um a um o que poupa muito a memoria. O ResultSet ele próprio implementa este padrão só trazendo dados do banco em pacotes de N registros. Se vc quiser paginação vc tb consegue com este padrão em que a consulta é limitada aos registros que se querem.

No segundo cenário vc usa uma lista ou set mesmo. Isto é o que o Hibernate faz. Vc pode usar lazy loading mas no fim sempre toda a lista será carregada.

Portanto, muitos dados = Fastlane Reader e poucos dados/dados especificos = list ou set

Criado 23 de dezembro de 2009
Ultima resposta 24 de dez. de 2009
Respostas 4
Participantes 5