Qual é a melhor prática para armazenar em cache os resultados da pesquisa paginada cujas ordens / propriedades podem ser alteradas?
Digamos que, no meu aplicativo, alguém queira ver os últimos 20 tópicos de discussão (de 10.000). Uma solicitação seria enviada ao banco de dados, via servlet
, para buscar os 20 primeiros registros da tabela de threads de discussão como XML / JSON. Se eles querem ver os próximos 20, vão para a próxima página de resultados e isso dispara outra solicitação para obter o próximo lote (limite e deslocamento = 20, etc.).
Para reduzir a carga do servidor e a espera do cliente, gostaria de armazenar em cache as páginas anteriores dos resultados. No entanto, tenho duas perguntas:
- A tabela na qual os resultados são mostrados pode ser ordenada por mais de um atributo (por exemplo, data de criação do encadeamento, autor do encadeamento, data do último post). Isso significa que uma declaração como 'primeiros 20 resultados' não faz sentido sem contexto (ou seja, pelo que estamos ordenando). Como o front-end, então, comunica ao back-end o que ele já carregou? Meu primeiro pensamento foi usar IDs para cada resultado, mas enviá-los de volta ao servidor em solicitações subsequentes (e filtrar os resultados com base neles) consumiria tanto tempo quanto enviar tudo de volta às cegas. Como posso fazer isso?
- E se um atributo de um resultado retornado anteriormente (ou seja, a data posterior mais recente) for alterado? Precisamos então de uma maneira de verificar cada resultado para ver se ele foi modificado no lado do servidor desde que foi paginado. Como posso fazer isso?