Mantenha a paginação repetível, se operações de mudança são realizadas
-
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:
- definir o tamanho da página - que é o número de resultados para mostrar por página;
- buscar cada página solicitada pelo usuário usando um deslocamento = número de página (0 com base) * tamanho de página
- 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.
Solução
Existem algumas escolas de pensamento o presente.
- dados é atualizado que seja
- 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)
- 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.