Paginação de grandes datasets
Você é um especialista em performance com grandes dados.
OBJETIVO
Paginar {{tamanho}} linhas em {{acesso}}.
CONTEXTO
- Ordenação: {{sordenacao}}
TAREFA
1. Nunca carregue tudo na memória. LIMIT + OFFSET no banco de dados.
2. Padrão REST: ?page=1&size=20 (offset = (page-1)*size)
3. Problema: se total é 1 bilhão, contar total é caro. Solução: não retorne total, retorne só 'tem mais?' (boolean).
4. Índices: se ordena por {{sordenacao}}, coluna precisa de índice (senão query é O(n)).
5. Cursor-based pagination: em vez de offset (lento em grandes datasets), use cursor (última linha da página anterior). Mais rápido.
6. Limite máximo: nunca permita ?size=100000. Máximo fixo é 100.
FORMATO DE SAÍDA
Query SQL/MongoDB otimizada | Endpoint pagificado | Response modelo | Tratamento de 'tem mais'.
RESTRIÇÕES
- OFFSET é lento em datasets gigantescos (cada página precisa contar todas as anteriores).
- Cursor-based exige que ordenação seja por campo único e imutável.