Ho un database scientifico con attualmente 4.300.000 record. È un database scientifico e un’API lo sta alimentando. A giugno 2020, probabilmente avrò circa 100.000.000 di record.

Questo è il layout de dell’output della tabella’:

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...

A proposito, questi sono dati fittizi. Ma l’output è una tabella con 5 colonne: ID, sensor_ID, velocità, velocità e direzione.

Quello che voglio ottenere è un metodo di impaginazione e filtro decente. Voglio creare un sito web (in nodejs) in cui verranno visualizzati questi +4.000.000 record (per ora), 10.000 record per pagina. Voglio anche essere in grado di filtrare sensor_ID, velocità, velocità o direzione.

Per ora, ho questa query per selezionare righe specifiche:

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...

Sto cercando alcune informazioni / suggerimenti sulla creazione di un metodo di impaginazione decente. Per ora, è ancora tranquillo veloce il modo in cui lo faccio, ma penso che sarà molto più lento quando abbiamo colpito + 50.000.000 di record.

Prima di tutto, ho trovato questa pagina: https://www.citusdata.com/blog/2016/03/30/five-ways-to-paginate/. Mi interessa l’impaginazione keyset. Ma ad essere onesti, non ho idea di come iniziare.

Cosa penso di dover fare:

Crea un indice sul campo ID:

CREATE UNIQUE INDEX index_id ON output USING btree (ID)

Ho anche trovato questa pagina: https://leopard.in.ua/2014/10/11/postgresql-paginattion. Quando scorri verso il basso fino a “Miglioramento # 2: Il metodo Seek”, puoi vedere che hanno eliminato la clausola OFFSET e stanno usando una clausola WHERE. Vedo anche che stanno usando l’ultimo ID insert nella loro query:

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

Non lo capisco appieno. Per la prima pagina, ho bisogno dell’ultimo ID insert. Poi vado a prendere i 10.000 nuovi record. Ma dopo, per ottenere la seconda pagina, non ho bisogno dell’ultimo ID di inserimento, ho bisogno del 10.000 ° ultimo ID di inserimento (immagino).

Qualcuno può darmi una buona spiegazione sull’impaginazione e sul filtraggio in modo veloce.

Le cose che sto usando: – postgresql-pgadmin( per la gestione del database) – node.js (ultima versione)

Grazie a tutti! E hanno un bel 2020!

MODIFICA 1: non ne ho idea, ma massiveJS (https://massivejs.org/) potrebbe essere qualcosa di buono da usare? E dovrei usarlo su TUTTE le query o solo sulle query di impaginazione?

MODIFICA 2: PENSO di averlo capito un po ‘ (correggimi se sbaglio).

diciamo che ho 100.000 record:

1) Ottenere l’ultimo inserito ID

2) Utilizzare quest’ultimo inserito ID per recuperare gli ultimi 10.000 record

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) Mostra i 10.000 record, ma anche di risparmiare inserisci l’ID di 10.000 record da utilizzare nella query successiva

4) Ottenere la prossima 10.000 record con il nuovo ultimo inserire id

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

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.