jag har en vetenskaplig databas med för närvarande 4 300 000 poster. Det är en vetenskaplig databas, och ett API matar det. I juni 2020 kommer jag förmodligen att ha cirka 100 000 000 poster.

Detta är de layout av tabellen ’utgång’:

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, det här är dummy data. Men utgången är en tabell med 5 kolumner: ID, sensor_ID, hastighet, hastighet och riktning.

vad jag vill uppnå är en anständig paginering och filtermetod. Jag vill skapa en webbplats (i nodejs) där denna +4 000 000 poster (för tillfället) kommer att visas, 10 000 poster per sida. Jag vill också kunna filtrera på sensor_ID, hastighet, hastighet eller riktning.

för tillfället har jag den här frågan för att välja specifika 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...

jag söker efter lite information / tips om att skapa en anständig pagineringsmetod. För tillfället är det fortfarande tyst snabbt som jag gör det, men jag tror att det blir mycket långsammare när vi träffar +50.000.000 poster.

först och främst hittade jag den här sidan: https://www.citusdata.com/blog/2016/03/30/five-ways-to-paginate/. Jag är intresserad av keyset pagination. Men för att vara ärlig har jag ingen aning om hur jag ska börja.

vad jag tror att jag måste göra:

skapa ett index på ID-fältet:

CREATE UNIQUE INDEX index_id ON output USING btree (ID)

jag hittade också den här sidan: https://leopard.in.ua/2014/10/11/postgresql-paginattion. När du bläddrar ner till ”förbättring # 2: sökmetoden” kan du se att de tappade OFFSET-klausulen och använder en where-klausul. Jag ser också att de använder det sista insert ID i sin fråga:

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

jag förstår inte helt detta. För den första sidan behöver jag det allra sista insert ID. Sedan hämtar jag de 10 000 senaste skivorna. Men efter det, för att få den andra sidan, behöver jag inte det allra sista insert ID, jag behöver 10 000: e sista insert ID (antar jag).

kan någon ge mig en bra förklaring om paginering och filtrering på ett snabbt sätt.

de saker jag använder:- postgresql – pgadmin (för databashantering)- nod.js (senaste versionen)

Tack alla! Och ha ett trevligt 2020!

redigera 1: Jag har ingen aning, men kan massiveJS (https://massivejs.org/) vara något bra att använda? Och ska jag använda den på alla frågor, eller bara på paginationsfrågorna?

redigera 2: Jag tror att jag fick det räknat ut lite (korrigera mig om jag har fel).

låt oss säga att jag har 100 000 poster:

1) Få det senast infogade ID: t

2) Använd det senast infogade ID: t för att hämta de senaste 10 000 posterna

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) Visa De 10 000 posterna men spara också insert ID för de 10 000 posten som ska användas i nästa fråga

4) Få de nästa 10 000 posterna med det nya senaste insert id

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

Lämna ett svar

Din e-postadress kommer inte publiceras.