Pregunta

Si queremos paginar resultados de una fuente de datos que admita paginación, debemos ir a un proceso de:

  1. definir el tamaño de la página: es decir, la cantidad de resultados que se mostrarán por página;
  2. recuperar cada página solicitada por el usuario usando un desplazamiento = número de página (basado en 0) * tamaño de página
  3. mostrar los resultados de la página recuperada.

Todo esto funciona bien sin considerar el hecho de que una operación puede afectar el sistema backend y arruinar la paginación.Me refiero a que alguien inserte datos entre búsquedas de páginas o elimine datos.

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.

El comportamiento descrito puede causar confusión al espectador.¿Conoce alguna solución práctica para solucionar este problema?

¿Fue útil?

Solución

Hay algunas escuelas de pensamiento sobre esto.

  1. los datos se actualizan, déjalo ser
  2. Puede implementar algún tipo de método de almacenamiento en caché que mantenga el conjunto de resultados completo (esta podría no ser una opción si funciona con conjuntos de datos realmente grandes)
  3. Puede hacer una comparación en cada operación de página y notificar al usuario si el recuento total de registros cambia

.

Otros consejos

Si las actualizaciones que le preocupan son principalmente inserciones nuevas (por ejemplo, el propio StackOverflow parece sufrir este problema cuando se paginan las preguntas y aparecen nuevas preguntas), una forma de manejarlo es capturar una marca de tiempo cuando se emite la primera consulta de paginación. y luego limite los resultados de las solicitudes de páginas posteriores a elementos que existían antes de esa marca de tiempo.

Mientras los usuarios comprendan que los datos subyacentes siempre cambian, no se confundirán.Así que hazlo de la manera más sencilla.

Puede almacenar en caché las primeras páginas del resultado y usarlas para vistas posteriores, pero luego los resultados no estarán sincronizados con la base de datos, lo que es aún más confuso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top