Paginación del cursor de Laravel

paginación

Paginación del cursor de Laravel

Paginación – es necesaria cuando tiene un gran conjunto de datos para enviar al usuario y es demasiado grande para enviarlo todo a la vez. Necesitamos dividir los datos en partes, en lugar de una sola respuesta. Veamos primero lo que existe actualmente.

En Laravel, los métodos elocuentes paginatesimplePaginate están integrados en el marco para la paginación. Estos métodos son paginación basada en compensación, donde enviamos opciones de pageperPage que dividen los datos en “páginas” de tamaño “por página”.

Las desventajas de la paginación compensada son que puede obtener datos duplicados u omitidos.


Imagine que está en una página de 50 resultados y va a la página siguiente, pero alguien elimina un registro que ya ha visto. Ahora el récord que habría estado en la posición 51 va a 50, ¡y nunca lo ves! Ese registro fue ‘omitido’.

Del mismo modo, si alguien agrega un registro que habría aparecido entre los 50 primeros de su conjunto de resultados, ¡entonces el registro de 50 golpes a 51! ¡Este registro habría sido el último registro en una página y el primer registro en la página siguiente!

El tiempo de respuesta se vuelve más lento cuanto mayor es el desplazamiento, porque la base de datos aún tiene que leer las filas de desplazamiento para saber desde dónde comenzar a seleccionar los datos. Si la paginación profunda es un caso de uso, es posible que no desee utilizar la paginación del cursor. Ahí es donde la paginación del cursor podría ayudar: a partir de Laravel 8.4.1 ahora tenemos la paginación del cursor.


¿Qué es la paginación del cursor?

Cuando se usa la paginación del cursor, el cliente recibe una “clave” llamada cursor en la respuesta. El cursor es un puntero a un elemento específico: el siguiente elemento a buscar. La base de datos usará el cursor para ir directamente al elemento con este puntero y no necesita leer ninguna fila para llegar a él. Si el cursor devuelto en la respuesta está vacío, se ha llegado a la última página.

De la documentación de Laravel:

 

Mientras que paginatesimplePaginate crean consultas utilizando la cláusula “offset” de SQL, la paginación del cursor funciona mediante la construcción de cláusulas “where” que comparan los valores de las columnas ordenadas contenidas en la consulta, proporcionando el rendimiento de base de datos más eficiente disponible entre todos los métodos de paginación de Laravel. Este método de paginación es particularmente adecuado para grandes conjuntos de datos e interfaces de usuario con desplazamiento “infinito”.

 

En Laravel, como se muestra aquí, el uso es en realidad el mismo que simplePaginate:

$usuarios = Usuario::orderBy('id')->cursorPaginate(10);

Advertencias

El uso de la paginación del cursor realmente puede mejorar el rendimiento, pero hay algunas cosas que se deben tener en cuenta antes de su uso. En primer lugar, no es posible saltar a una página aleatoria, ya que se necesita el cursor para obtener los registros. El cursor debe basarse en una columna única o secuencial. La paginación del cursor solo mejora el rendimiento si el orden por columnas está indexado.


Conclusión

Al igual que con cualquier software de toma de decisiones, todo es una compensación y se trata de tomar la mejor decisión posible. Si un usuario alguna vez necesita ir hacia atrás, o a alguna página aleatoria, tal vez se quede con la paginación desplazada. Si está implementando un desplazamiento infinito, considere usar la paginación del cursor.

¡Gracias por leer!

Recent Post