| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/07/2006 10:20:50
|
calemino
Entusiasta Java
Membro desde: 22/11/2003 19:24:12
Mensagens: 23
Offline
|
Olá pessoal,
iremos desenvolver um sistema e nosso volume de resultados de consulta pode ser razoavelmente grande, por volta de 5000 registros. Gostaria da opinição de vocês para as seguintes questões:
1) Onde seria melhor implementar a paginação ? No próprio banco de dados, no DAO, na camada de apresentação, etc...
2) Existem componentes prontos para a resposta da questão 1 ? Quais seriam ?
Qualquer ajuda é bem vinda. Agradeço desde já.
Calemino.
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/07/2006 10:31:13
|
Pedrosa
JWizard
![[Avatar]](/images/avatar/2b763288faedb7707c0748abe015ab6c.jpg)
Membro desde: 13/07/2005 13:08:08
Mensagens: 2505
Localização: São Paulo - Brasil
Offline
|
Existe uma taglib que faz essa paginação automática:
http://displaytag.homeip.net/displaytag-examples-1.1/example-paging.jsp
vc retorna uma lista da sua classe DAO e passa via request para o JSP a taglib se vira e monta, e vc define o número de páginas exibidas e além disso ela exporta automaticamente para pdf, xls, csv, rtf.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/07/2006 10:31:36
|
Pedrosa
JWizard
![[Avatar]](/images/avatar/2b763288faedb7707c0748abe015ab6c.jpg)
Membro desde: 13/07/2005 13:08:08
Mensagens: 2505
Localização: São Paulo - Brasil
Offline
|
No caso de grandes resultados vc precisa fazer alguns ajustes nela, pois ela carrega tudo de uma vez.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/07/2006 10:32:57
|
marceloplis
GUJ Ranger
Membro desde: 22/08/2005 10:08:21
Mensagens: 877
Localização: São Paulo - SP
Offline
|
A melhor opção seria vc fazer no BD, pois a quantidade retornada seria dividida e não tudo numa pancada, pois assim fica mais lento, já paginando no BD fica mais rápido.
Devido a facilidade dê uma estudada:
http://www.guj.com.br/posts/list/35113.java
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/07/2006 11:46:52
|
Bjornn Borg
JavaChild
Membro desde: 25/03/2004 15:03:50
Mensagens: 140
Offline
|
Cara, acho que vc deveria ajustar o seu design para fazer a paginação no banco de dados.
Como já disseram, taglibs e outros componentes só paginam depois que todo o resultado já foi retornado.
Eu usava um esquema assim em consultas grandes:
Ou seja, busque os 10 primeiros registros da tabela "tabela" que não estejam entre os 10 primeiros registros da tabela "tabela".
daí, para as demais pgs, é só mudar o segundo 10 para 20, 30, 40, 50...
Abraço.
|
Tenha fé. O que é caro por R$ 10,00 poder ser barato por R$ 50,00 amanhã.
char[] name = {66,106,111,114,110,110,32,66,111,114,103};
char[] cert = {83,67,87,67,68,32,49,46,52}; |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/07/2006 12:56:15
|
marciobarroso
Virtual Machine Man
![[Avatar]](/images/avatar/6828f61cee49c7a4da0f9c1d3e03b857.jpg)
Membro desde: 13/05/2005 23:17:13
Mensagens: 508
Localização: Barueri / SP / BR
Offline
|
O melhor a ser feito é a paginação no banco, passando 1 atributo para controle dos registros ...
SQL :
Hibernate :
Você só precisará criar uma rotina para gerar a qtde de páginas usando a qtde de registros / registros por página e printar os números de páginas com um link passando o indice que será usado pelo select para o java.
falando assim parece easy, mas deu um trabalho implementar isso.
Se quiser, posso te passar o que eu tenho .
Abraço
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/07/2006 13:03:35
|
ZehOliveira
GUJ Ranger
Membro desde: 12/12/2003 22:13:49
Mensagens: 964
Localização: Maceio-AL
Offline
|
Depende muito.
Se você sabe que o usuário vai querer ver todas as páginas, é melhor trazer logo tudo e paginar na view. Poupa o trabalho do banco de dados, principalmente se for uma consulta muito pesada (lembrando que consulta pesada != consulta que retorna muitos dados).
Mas, por outro lado, se o cara provavelmente só vai querer ver a primeira página, é melhor paginar logo na consulta.
Analise caso a caso, não há uma solução tamanho único para tudo. O Google, por exemplo, sabe que ninguem vai querer ver a página 87.565 de uma busca, daí ele nem se preocupa em procurar isso, ele só traz as primeiras páginas, sabendo que todo mundo vai parar por ali.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/07/2006 16:59:24
|
Ironlynx
Moderador
![[Avatar]](/images/avatar/93d65641ff3f1586614cf2c1ad240b6c.jpg)
Membro desde: 02/05/2003 01:06:41
Mensagens: 3515
Localização: The other side of the screen
Offline
|
No caso de grandes resultados vc precisa fazer alguns ajustes nela, pois ela carrega tudo de uma vez.
Fala Pedrosa, resolvi me arriscar com a displaytag!Meu sistema é simples, o usuário se loga no sistema, navega/consulta/insere itens.
Eu tô querendo que na hora que ele faça uma dada pesquisa, retornem 50 resultados(linhas) por página.São ramos de seguro como os abaixo:
Eu não entendi uma coisa(código da página):
O atributo que eu quiser mostrar (na verdade o conjunto de Ramos de Seguros cadastrados), eu tenho que pôr ele na sessão?
|
Não basta persistir...tem que prevalecer!
Ironlynx
Anarquista de Sistemas
http://osereojava.blogspot.com/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/08/2006 10:46:28
|
fredbh
Smalltalk
Membro desde: 22/08/2005 14:27:32
Mensagens: 4
Offline
|
Tudo bem pessoal, tbm estou com essa duvida... mas gostaria de usar as facilidades oferecidas pelo displaytag...
O problema eh q meu sistema ira retorna quantidades enormes de dados... e o mesmo precisa ser rapido... por eh um sistema basicamente de consulta... com muitos usuarios...
O displaytag ira carregar tudo na memoria e pagina a partir da memoria ?
Quais ajustes devo fazer para q o displaytag pagine via BD ?
Alguma soluçao de cache q posso utilizar ?
Tirando a paginaçao manual... qual outro metodo recomendam para um sistema q eh basicamente buscas... com muitos usuarios( aprox: 100/seg), buscando obj complexos(com relacionamentos). Alguma sugestao ?
Desde ja agradeço
valewww
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/08/2006 11:15:12
|
Pedrosa
JWizard
![[Avatar]](/images/avatar/2b763288faedb7707c0748abe015ab6c.jpg)
Membro desde: 13/07/2005 13:08:08
Mensagens: 2505
Localização: São Paulo - Brasil
Offline
|
Ironlynx, sim jogue o resultado na sessão na primeira vez e crie uma ação de paginar na propriedade requestURI, nessa ação os dados já estarão na sessão, a taglib se vira e monta, não precisando conectar novamente no banco.
E o name deve ser o nome que vc atribuiu na sessão, ou seja vc carregou as informações na primeira vez e agora navega com esses dados na sessão.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/06/2009 08:46:45
|
romuloff
Java Ninja
![[Avatar]](/images/avatar/16d62f85a33e3e975a40c787b69d68dd.jpg)
Membro desde: 02/07/2007 14:56:24
Mensagens: 254
Localização: Uberlandia - MG
Offline
|
Desenterrando ...
Pois gostaria de discutir se displaytag ainda é uma boa opção para paginar e implementar ajax em cima dele pra paginar/ordenar (e tambem se ele ainda é uma boa opção mesmo sem essa necessidade). Pra isso conheço uma solução integrando o displaytag com ajaxtags. Tem + alguma ?
Ou se pra facilitar isso estariam utilizando frameworks javascript/json (jquery, extJS, etc) ?
Eaí, como está o cenário atualmente ?
This message was edited 2 times. Last update was at 08/06/2009 08:55:43
|
|
|
 |
|
|