Pergunta

Eu estou olhando para situações em aplicações web orientadas para o banco de dados quando se deve confiar no lado do cliente triagem de tabelas sobre a classificação no lado do servidor. Uma situação particular que está me incomodando é a paginação.

Ao tentar paginar uma grande mesa (digamos 10.000 linhas), bem como classificá-lo por uma coluna específica, qual seria a melhor abordagem a adoptar?

Eu entendo que algumas questões relacionadas a isso são:

  • Eu não posso voltar a tabela inteira para o lado do cliente de uma só vez
  • Não posso tipo até 10000 registros com javascript
  • ordenar a tabela vai envolver triagem linhas em todas as páginas, não apenas a página atual.

Então, você tem alguma mais problemas para adicionar a esta lista?

Que abordagem levaria a uma boa mistura de lado do cliente e interação do lado do servidor de modo a que a carga do servidor é minimizado?


ALÉM:

Ok, a triagem na base de dados e devolver a página reqd, uma página anterior e uma página seguinte parece ser a melhor aposta.

Agora, considere o seguinte:

O usuário está na página (3 de 10) da mesa classificadas por número de série. Agora o usuário clica sobre o cabeçalho com o nome "username", querendo classificar a tabela por nome de usuário.

quesion:? Caso o resultado final ser "página (1 de 10), ordenadas por nome de usuário" ou deveria ser "página (3 de 10), ordenadas por nome de usuário"

Eu sei que esta é uma questão muito subjetiva, mas o que você recomendaria e por quê?

Foi útil?

Solução

O lado do cliente é melhor manter simples:. Javascript triagem / paginação é apenas para muito pequenos conjuntos de resultados - pequena o suficiente para que um usuário não notará um acerto de desempenho

O servidor é onde você pode otimizar a carga do servidor:

Load pode vir na forma de pedidos frequentes para mais páginas, um grande número de linhas / colunas por página e solicitações freqüentes para recorrer. (Nós ainda não conversamos sobre como filtrar)

Então, dependendo de seus usuários e uso real , você pode precisar de algum tipo de cache. Note, estas são sugestões para uma hora depois que você sabe o que seus usuários estão fazendo:

  • Para solicitações de página freqüentes, considere ter alguns pedidos Ajax pré-carregar os próximos (e anteriores) páginas, em seguida, troca nas linhas (via Javascript) para a mesa mediante solicitação do usuário.

  • Para grandes tamanhos de página, considere manter as linhas de uma aplicação (memória) cache "mais recentemente utilizado", de modo que o banco de dados não é obrigado a cuspir os mesmos enormes pedaços de dados e outra vez .

  • Para recorrer freqüente, uma boa abordagem é manter uma tabela de cache no SQL apenas com os resultados.

E sempre, sempre, sempre índice de banco de dados de forma adequada.


resposta adicionais:

A minha resposta muito subjetivo é a seguinte: O usuário (me) quer classificar a partir de uma página arbitrária. Deixe-os (me). Não há nada mais irritante do que estar onde você quer ser, e ter uma aplicação jogá-lo de volta para o início da lista.

Outra consideração é vários níveis de classificação: você quer para implementar a classificação por número de série, em seguida, nome de usuário? Considere o que Microsoft Excel faz, ou qualquer outra aplicação que os usuários estão familiarizados. Seus usuários provavelmente vai ficar bem com o que eles estão acostumados a -. Incluindo a ser jogado de volta à página 1

Outras dicas

Os bancos de dados são verdadeiros animais em triagem e seleção de dados. Então sua melhor aposta é definitivamente ter a palavra cliente para o servidor, "Eu quero página X com linhas Y classificadas segundo a Z." Em seguida, o banco de dados faz sua coisa, eo cliente mostra o resultado. Para melhorar o desempenho, você poderia fazer seus resultados cache do cliente e, além disso você pode fazer seu pedido do código as seguintes e anteriores páginas após a atual foi tão absurda que possam ser mostradas instantaneamente a pedido.

A melhor abordagem seria a de fazer a triagem e paginação no nível de banco de dados e retornar apenas um subconjunto dos dados originais que só serão mostrados na tela. No javascript neste cenário.

Se por algumas razões você não pode classificar e página no nível de banco de dados, então você deve fazê-lo com um script do lado do servidor. No javascript neste cenário também.

E o pior abordagem seria fazer a triagem e paginação com javascript que, naturalmente, não é recomendada a todos por razões óbvias.

Ter a db tipo que fica entregue à página específica na tela. Será quase sempre mais rápido, ser armazenado em cache e facilidade tal carga no navegador.

Se quiser, tem o lado do cliente permitem ainda sub-ordenação via javascript, etc, se os dados são detalhadas o suficiente e poderia beneficiar dele. Você pode querer loja que características sub-ordenação são selecionados para que eles são lembrados entre as páginas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top