ik heb een wetenschappelijke database met momenteel 4.300.000 records. Het is een wetenschappelijke database, en een API voedt het. In juni 2020 zal ik waarschijnlijk ongeveer 100.000.000 records hebben.

dit is de indeling van de tabel “output”‘:

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

trouwens, dit is dummy data. Maar output is een tabel met 5 kolommen: ID, sensor_ID, snelheid, snelheid en richting.

wat Ik wil bereiken is een fatsoenlijke paginering en filtermethode. Ik wil een website maken (in nodejs) waar deze +4.000.000 records (voor nu) zal worden weergegeven, 10.000 records per pagina. Ik wil ook kunnen filteren op sensor_ID, snelheid, snelheid of richting.

voor nu heb ik deze query voor het selecteren van specifieke rijen:

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

ik ben op zoek naar wat informatie/tips over het maken van een fatsoenlijke paginering methode. Voor nu is het nog steeds rustig snel zoals ik het doe, maar ik denk dat het een stuk trager zal zijn als we +50.000.000 platen raken.

allereerst vond ik deze pagina: https://www.citusdata.com/blog/2016/03/30/five-ways-to-paginate/. Ik ben geïnteresseerd in de keyset paginering. Maar om eerlijk te zijn, Ik heb geen idee hoe te beginnen.

wat ik denk dat ik moet doen:

Maak een index aan op het ID-veld:

CREATE UNIQUE INDEX index_id ON output USING btree (ID)

ik heb ook deze pagina gevonden: https://leopard.in.ua/2014/10/11/postgresql-paginattion. Als je naar beneden scrolt naar “verbetering #2: de zoekmethode”, kun je zien dat ze de OFFSET-clausule hebben laten vallen, en een WHERE-clausule gebruiken. Ik zie ook dat ze met behulp van de laatste insert ID in hun query:

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

ik begrijp dit niet helemaal. Voor de eerste pagina heb ik de allerlaatste insert ID nodig. Dan haal ik de 10.000 nieuwste platen. Maar daarna, om de tweede pagina te krijgen, heb ik niet de allerlaatste insert ID nodig, Ik heb de 10.000 e laatste insert ID nodig (denk ik).

kan iemand mij een goede uitleg geven over paginering en filteren op een snelle manier.

de dingen die ik gebruik: – postgresql-pgadmin( voor databasebeheer) – node.js (laatste versie)

Bedankt iedereen! En heb een mooie 2020!

EDIT 1: Ik heb geen idee, maar zou massiveJS (https://massivejs.org/) iets goeds kunnen zijn om te gebruiken? En moet ik het gebruiken op alle queries, of alleen op de paginering queries?

bewerken 2: Ik denk dat ik heb het bedacht een beetje (corrigeer me als ik verkeerd ben).

stel dat ik 100.000 records heb:

1) Haal het laatst ingevoegde ID

2) Gebruik dit Laatst ingevoegde ID om de laatste 10.000 records op te halen

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) Toon de 10.000 records, maar sla ook de insert ID op van de 10.000 the record om te gebruiken in de volgende query

4) Haal de volgende 10.000 records op met de nieuwe last insert id

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

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.