Problemas de paginación: paginación basada en desplazamiento y paginación basada en cursor

一 、 Paginación basada en offset

La paginación basada en desplazamiento es la solución lista para usar más común en casi todos los marcos modernos. Puede especificar el límite de parámetros, desplazamiento, página, etc. para especificar un conjunto de resultados específicos requeridos.

modo de consulta

http://abc.dd.com/list?page=n&count=n

Desventaja

1. A medida que aumenta el conjunto de datos, el rendimiento se ralentiza porque se consultarán todos los datos anteriores al número de página. Por ejemplo, seleccione * del límite de mensajes 100000, 100; consultará los primeros 100,100 datos.

2. La cantidad de datos en el conjunto de resultados ha cambiado, lo que da como resultado datos de consulta inexactos. En algunos casos, se devolverán resultados duplicados.

ventaja

Puede elegir el número de página para consultar a voluntad y puede omitir el número de página.

Escenarios de aplicación

Experiencia en gestión

二 、 Paginación basada en cursor

La paginación basada en el cursor es la técnica más eficaz y proporciona los resultados más precisos. El cursor se refiere a un conjunto de teclas que apunta a un elemento específico en el conjunto de datos. Actúa como un puntero al registro. Al llamar a la API, puede pasar el conjunto de claves junto con la solicitud para obtener los datos antes o después del cursor. También puede pasar el parámetro limit para limitar el conjunto de resultados devuelto.

modo de consulta

Http://twitter.com/followers/ids/barackobama.xml?cursor=-1

ventaja

1. Mejor rendimiento y mayor velocidad de consulta. Por ejemplo, seleccione * de msgs donde id> cursor_id limit 100; solo consultará 100 piezas de datos.

2. Se puede escalar a grandes conjuntos de datos y también proporcionar resultados consistentes. El conjunto de resultados no será inexacto debido a cambios en la cantidad de datos

Desventaja

Solo puede consultar páginas consecutivas desde el principio; no puede proporcionar el número total de registros y evita saltar a una página específica

Escenarios de aplicación

Este método de cursor se puede utilizar para pasar páginas de grandes conjuntos de datos. El mejor caso de uso para la paginación basada en cursor es crear páginas con desplazamiento infinito. Suponga que el conjunto de datos cambia con mucha frecuencia y que el usuario a menudo puede extraer el conjunto de datos de los feeds de noticias del usuario, publicaciones, etc. Tanto Twitter como Facebook utilizan este método. La paginación en el lado de la aplicación se usa comúnmente de esta manera.

Paginación basada en el cursor de Twitter 事例 :

https://api.twitter.com/1.1/search/tweets.json?q=php&since_id=24012619984051000&max_id=250126199840518145&result_type=recent&count=10

Paginación basada en el cursor de la API de Facebook 事例 :

{
    "data":[
        {....},
        {....}
    ],
    "paging":{
        "cursors":{
            "after":"MTAxNTExOTQ1MjAwNzI5NDE=",
            "before":"NDMyNzQyODI3OTQw"
        },
        "previous":"https://graph.facebook.com/me/albums?limit=25&before=NDMyNzQyODI3OTQw",
        "next":"https://graph.facebook.com/me/albums?limit=25&after=MTAxNTExOTQ1MjAwNzI5NDE="
    }
}

Tres, asuntos que necesitan atención

1. La paginación basada en el cursor debe estar ordenada, el cursor es preferiblemente un id auto-creciente en la base de datos, ordenado y globalmente único, en este caso la implementación es relativamente simple. En la base de datos, los datos de la página siguiente o anterior se pueden consultar por ser mayor o menor que.

2. Si no hay un ID de incremento automático en la base de datos, el cursor puede usar otros campos, pero el campo debe ser un tipo de número, de modo que pueda consultar la página siguiente o anterior siendo mayor o menor que, tal como marcas de tiempo como ctime.

3. El problema de usar ctime como cursor es: cuando la concurrencia es alta, ctime tiende a duplicarse.

  • a. La solución es que el cursor usa ctime para agregar una clave única como el segmento order_i, y luego usa cifrado simétrico base64 + para generar una cadena de ctime + order_id, y el campo generado se usa como cursor.

  • b. Al consultar, por ejemplo, cada página consulta 20 elementos, el backend descifra ctime + order_id y consulta cuántos datos hay en ese momento de acuerdo con ctime. Si hay 3 datos, donde ctime> ctimeValue y limit 20 + 3; Consulta 23 datos y luego encuentra los 20 datos necesarios a través de order_id.

  • c. Genere un nuevo cursor basado en los nuevos datos y regrese.

Siga la cuenta oficial e ingrese " java-summary " para obtener el código fuente.

Terminado, ¡llámalo un día!

[ Difusión de conocimientos, valor compartido ], gracias amigos por su atención y apoyo, soy [ Zhuge Xiaoyuan ], un trabajador migrante de Internet que lucha en sus dudas.

Supongo que te gusta

Origin blog.csdn.net/wuxiaolongah/article/details/114155510
Recomendado
Clasificación