Mantenha a paginação repetível, se operações de mudança são realizadas

StackOverflow https://stackoverflow.com/questions/84615

  •  01-07-2019
  •  | 
  •  

Pergunta

Se alguém quiser resultados paginar de uma fonte de dados que suporta a paginação nós temos que ir para um processo de:

  1. definir o tamanho da página - que é o número de resultados para mostrar por página;
  2. buscar cada página solicitada pelo usuário usando um deslocamento = número de página (0 com base) * tamanho de página
  3. mostrar os resultados da página buscada.

Tudo isso é funciona muito bem sem considerar o fato de que uma operação pode afetar o sistema de back-end que estraga a paginação ocorrendo. Estou falando de alguém inserir dados entre buscas de página ou exclusão de dados.

page_size = 10;
get page 0 -> results from 0 to 9;
user inserts a record that due to the query being executed goes to page 0 - the one just shown;
get page 1 -> results from 10 to 19 - the first results on the page is the result on the old page 0.

O comportamento descrito pode causar confusão para o telespectador. Você sabe qualquer solução prática para resolver este problema.

Foi útil?

Solução

Existem algumas escolas de pensamento o presente.

  1. dados é atualizado que seja
  2. Você poderia implementar algum tipo de método de caching que irá realizar o Todo conjunto de resultados (isso pode não ser uma opção se trabalhar com muito grandes conjuntos de dados)
  3. Você poderia fazer uma comparação sobre cada operação página e notificar o usuário se a contagem total de registros alterações

.

Outras dicas

Se as atualizações que estão preocupados com são principalmente novas inserções (por exemplo, a própria StackOverflow parece sofrer com este problema quando folheando perguntas e novas questões vêm em) uma maneira de lidar com isso é capturar um timestamp quando você emitir o primeira consulta paginação, e depois limitar os resultados de pedidos de páginas subsequentes para itens que existiam antes disso timestamp.

Enquanto os usuários a entender que os dados subjacente está sempre mudando, eles não serão confundidos. Então, basta fazê-lo da maneira simples.

Você pode armazenar em cache as primeiras páginas do resultado e usar isso para vistas posteriores, mas, em seguida, os resultados serão fora de sincronia com o banco de dados, o que é ainda mais confusa.

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