Tengo una base de datos científica con actualmente 4.300.000 registros. Es una base de datos científica, y una API la está alimentando. En junio de 2020, probablemente tendré alrededor de 100,000,000 de registros.

Este es el diseño de la salida de la tabla’:

ID | sensor_ID | speed | velocity | direction-----------------------------------------------------1 | 1 | 10 | 1 | up2 | 2 | 12 | 2 | up3 | 2 | 11.5 | 1.5 | down4 | 1 | 9.5 | 0.8 | down5 | 3 | 11 | 0.75 | up...

Por cierto, estos son datos ficticios. Pero la salida es una tabla con 5 columnas: ID, sensor_ID, velocidad, velocidad y dirección.

Lo que quiero lograr es un método de paginación y filtro decente. Quiero crear un sitio web (en nodejs) donde esta +4.000.000 de registros (por ahora) se mostrará, 10.000 registros por página. También quiero poder filtrar en sensor_ID, velocidad, velocidad o dirección.

Por ahora, tengo esta consulta para seleccionar filas específicas:

SELECT * FROM output ORDER BY ID DESC OFFSET 0 LIMIT 10000 // first 10,000 rowsSELECT * FROM output ORDER BY ID DESC OFFSET 10000 LIMIT 10000 // next 10,000 rows...

Estoy buscando información/consejos para crear un método de paginación decente. Por ahora, sigue siendo rápido y silencioso de la forma en que lo hago, pero creo que será mucho más lento cuando lleguemos a +50.000.000 de registros.

En primer lugar, encontré esta página: https://www.citusdata.com/blog/2016/03/30/five-ways-to-paginate/. Estoy interesado en la paginación del conjunto de claves. Pero para ser honesto, no tengo idea de cómo empezar.

Lo que creo que debo hacer:

Crear un índice en el campo ID:

CREATE UNIQUE INDEX index_id ON output USING btree (ID)

También encontré esta página: https://leopard.in.ua/2014/10/11/postgresql-paginattion. Cuando se desplaza hacia abajo hasta «Mejora # 2: El método de búsqueda», puede ver que eliminaron la cláusula OFFSET y están utilizando una cláusula WHERE. También veo que están usando el último ID de inserción en su consulta:

SELECT * FROM output WHERE ID < <last_insert_id_here> ORDER BY ID DESC LIMIT 10000

No lo entiendo del todo. Para la primera página, necesito el último ID de inserción. Luego busco los 10.000 discos más recientes. Pero después de eso, para obtener la segunda página, no necesito el último ID de inserción, necesito el 10,000 último ID de inserción (supongo).

Puede alguien darme una buena explicación sobre la paginación y el filtrado de una manera rápida.

Las cosas que estoy usando: – postgresql-pgadmin (para la administración de bases de datos)- nodo.js (última versión)

¡Gracias a todos! ¡Y que tengas un buen 2020!

EDIT 1: no tengo idea, pero podría massiveJS (https://massivejs.org/) ser algo bueno para usar? ¿Y debería usarlo en TODAS las consultas, o solo en las consultas de paginación?

EDITAR 2: CREO que lo entendí un poco (corrígeme si me equivoco).

Digamos que tengo 100,000 registros:

1) Obtenga el último ID insertado

2) Use este último ID insertado para obtener los últimos 10,000 registros

SELECT * FROM output WHERE ID < 100000 ORDER BY ID DESC LIMIT 10000 // last insert ID is here 100,000 because I have 100,000 records

3) Mostrar los 10.000 registros, pero también guardar el ID de inserción de los 10.000 registros que se utilizarán en la siguiente consulta

4) Obtener los siguientes 10.000 registros con el nuevo último id de inserción

SELECT * FROM output WHERE ID < 90000 ORDER BY ID DESC LIMIT 10000 // 90,000 is the very last insert id - 10,000

Deja una respuesta

Tu dirección de correo electrónico no será publicada.