Paginação - Melhores opções  XML
Índice dos Fóruns » Desenvolvimento Web
Autor Mensagem
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.
Pedrosa
JWizard
[Avatar]

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.
Pedrosa
JWizard
[Avatar]

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.
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
[Email] [MSN]
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};
marciobarroso
Virtual Machine Man
[Avatar]

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
[Email] [WWW] [MSN]
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.
Ironlynx
Moderador
[Avatar]

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/
[WWW]
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

Pedrosa
JWizard
[Avatar]

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.
romuloff
Java Ninja
[Avatar]

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

 
Índice dos Fóruns » Desenvolvimento Web
Ir para:   
Powered by JForum 2.1.8 © JForum Team