am o bază de date științifică cu 4.300.000 de înregistrări în prezent. Este o bază de date științifică și un API o alimentează. În iunie 2020, probabil că voi avea aproximativ 100.000.000 de înregistrări.

acesta este aspectul tabelului ‘ieșire’:

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, acest lucru este dummy data. Dar ieșirea este un tabel cu 5 coloane: ID, sensor_ID, viteză, viteză și direcție.

ceea ce vreau să obțin este o metodă decentă de paginare și filtrare. Vreau să creez un site web (în nodejs) unde vor fi afișate aceste înregistrări +4,000,000 (deocamdată), înregistrări 10,000 pe pagină. De asemenea, vreau să pot filtra pe sensor_ID, viteză, viteză sau direcție.

deocamdată, am această interogare pentru selectarea anumitor rânduri:

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

caut câteva informații / sfaturi despre crearea unei metode de paginare decente. Deocamdată, este încă liniștit rapid modul în care o fac, dar cred că va fi mult mai lent când vom atinge +50.000.000 de înregistrări.

în primul rând, am găsit această pagină: https://www.citusdata.com/blog/2016/03/30/five-ways-to-paginate/. Sunt interesat de paginarea keyset. Dar să fiu sincer, nu am nici o idee cum să încep.

ce cred că trebuie să fac:

creați un index pe ID-câmp:

CREATE UNIQUE INDEX index_id ON output USING btree (ID)

am găsit și această pagină: https://leopard.in.ua/2014/10/11/postgresql-paginattion. Când derulați în jos până la „îmbunătățire #2: Metoda de căutare”, puteți vedea că au renunțat la clauza OFFSET și folosesc o clauză WHERE. De asemenea, văd că folosesc ultimul ID de inserare în interogarea lor:

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

nu înțeleg pe deplin acest lucru. Pentru prima pagină, am nevoie de ultimul ID de inserare. Apoi aduc cele mai noi 10.000 de discuri. Dar după aceea, pentru a obține a doua pagină, nu am nevoie de ultimul ID de inserare, am nevoie de cel de-al 10.000-lea ultimul ID de inserare (cred).

poate cineva să-mi dea o explicație bună despre paginare și filtrare într-un mod rapid.

lucrurile pe care le folosesc:- postgresql – pgadmin (pentru gestionarea bazelor de date)- nod.js (ultima versiune)

multumesc tuturor! Și să aveți un 2020 frumos!

EDIT 1: nu am nici o idee, dar ar putea massiveJS (https://massivejs.org/) fi ceva bun de utilizat? Și ar trebui să-l folosesc pe toate interogările sau numai pe interogările de paginare?

EDIT 2: Cred că mi-am dat seama puțin (corectează-mă dacă greșesc).

să presupunem că am 100.000 de înregistrări:

1) Obțineți ultimul ID introdus

2) Utilizați acest ultim id introdus pentru a prelua ultimele 10.000 de înregistrări

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) Afișați cele 10.000 de înregistrări, dar salvați și ID-ul de inserare al celor 10.000 de înregistrări de utilizat în următoarea interogare

4) Obțineți următoarele 10.000 de înregistrări cu noul ID de inserare

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

Lasă un răspuns

Adresa ta de email nu va fi publicată.