jeg har en vitenskapelig database med for tiden 4.300.000 poster. Det er en vitenskapelig database, OG EN API mater den. I juni 2020 vil jeg sannsynligvis ha rundt 100.000.000 poster.

dette er de layout av tabellen ‘utgang’:

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

BTW, dette er dummy data. Men utgang er et bord med 5 kolonner: ID, sensor_ID, hastighet, hastighet og retning.

Det jeg vil oppnå er en anstendig paginering og filtermetode. Jeg vil lage et nettsted (i nodejs) der dette +4.000.000 poster (for nå) vil bli vist, 10.000 poster per side. Jeg vil også kunne filtrere på sensor_ID, hastighet, hastighet eller retning.

For nå har jeg denne spørringen for å velge bestemte rader:

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

jeg soker etter litt informasjon / tips om a lage en anstendig paginering metode. For nå er det fortsatt stille fort slik jeg gjør det, men jeg tror det vil bli mye tregere når vi treffer + 50.000.000 poster.

Først av alt fant jeg denne siden: https://www.citusdata.com/blog/2016/03/30/five-ways-to-paginate/. Jeg er interessert i keyset paginering. Men for å være ærlig har jeg ingen anelse om hvordan jeg skal begynne.

hva jeg tror jeg må gjøre:

Opprett en indeks PÅ ID-feltet:

CREATE UNIQUE INDEX index_id ON output USING btree (ID)

jeg fant også denne siden: https://leopard.in.ua/2014/10/11/postgresql-paginattion. Når du ruller ned til «Forbedring #2: Søkemetoden», kan du se at de droppet OFFSET-klausulen, og bruker EN WHERE-klausul. Jeg ser også at de bruker den siste sett INN-IDEN i spørringen:

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

jeg forstår ikke fullt ut dette. For den første siden trenger jeg den aller siste innsettings-ID. Så henter jeg de 10.000 nyeste postene. Men etter det, for å få den andre siden, trenger jeg ikke den aller siste sett INN-ID, jeg trenger 10.000 th siste sett INN-ID(antar jeg).

Kan noen gi meg en god forklaring om paginering og filtrering på en rask måte.

ting jeg bruker:- postgresql-pgadmin (for databasebehandling)- node.js (siste versjon)

Takk alle sammen! Ha et fint 2020!

REDIGER 1: jeg har ingen anelse, men kan massiveJS (https://massivejs.org/) være noe godt å bruke? Og skal jeg bruke DET PÅ ALLE spørsmål, eller bare på paginering spørringer?

REDIGER 2: Jeg TROR jeg fikk det funnet ut litt (rett meg hvis jeg har feil).

La oss si at jeg har 100 000 poster:

1) Få DEN SISTE innsatte ID

2) Bruk DENNE SISTE innsatte ID for å hente de siste 10 000 postene

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) Vis de 10 000 postene, men lagre også sett INN-IDEN til de 10 000 postene som skal brukes i neste spørring

4) Få de neste 10 000 postene med den nye siste sett inn-iden

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

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert.