van egy tudományos adatbázisom, amely jelenleg 4 300 000 rekordot tartalmaz. Ez egy tudományos adatbázis, és egy API táplálja. 2020 júniusában valószínűleg körülbelül 100 000 000 rekordom lesz.
ez a táblázat kimenetének de elrendezése’:
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, ez dummy data. De a kimenet egy 5 oszlopos táblázat: ID, sensor_ID, speed, velocity and direction.
amit el akarok érni, az egy tisztességes lapozási és szűrési módszer. Szeretnék létrehozni egy weboldalt (nodejs – ben), ahol ez a +4 000 000 rekord (egyelőre) megjelenik, oldalanként 10 000 rekord. Azt is szeretném, hogy képes legyen szűrni sensor_ID, sebesség, sebesség vagy irány.
jelenleg ez a lekérdezés az egyes sorok kiválasztására szolgál:
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...
néhány információt/tippet keresek egy tisztességes lapozási módszer létrehozásáról. Egyelőre még mindig csendes gyors, ahogy én csinálom, de azt hiszem, sokkal lassabb lesz, amikor +50 000 000 rekordot érünk el.
először is ezt az oldalt találtam: https://www.citusdata.com/blog/2016/03/30/five-ways-to-paginate/. Érdekel a kulcskészlet lapozása. De hogy őszinte legyek, fogalmam sincs, hogyan kezdjem.
mit kell tennem:
hozzon létre egy indexet az ID-mezőben:
CREATE UNIQUE INDEX index_id ON output USING btree (ID)
ezt az oldalt is találtam: https://leopard.in.ua/2014/10/11/postgresql-paginattion. Amikor lefelé görget a “Improvement #2: The Seek Method” pontra, láthatja, hogy elvetették az OFFSET-záradékot, és WHERE-záradékot használnak. Azt is látom, hogy a lekérdezésben az utolsó beszúrási azonosítót használják:
SELECT * FROM output WHERE ID < <last_insert_id_here> ORDER BY ID DESC LIMIT 10000
nem teljesen értem ezt. Az első oldalhoz szükségem van a legutolsó beszúrási azonosítóra. Aztán elhozom a 10.000 legújabb lemezt. De ezt követően a második oldal megszerzéséhez nem a legutolsó beszúrási azonosítóra van szükségem, hanem a 10 000.utolsó beszúrási azonosítóra (azt hiszem).
tud valaki adni nekem egy jó magyarázat a lapozás és a szűrés egy gyors módja.
az általam használt dolgok:- postgresql – pgadmin (adatbázis – kezeléshez) – csomópont.js (legújabb verzió)
Köszönöm mindenkinek! Szép 2020-at!
EDIT 1: fogalmam sincs, de lehet massiveJS (https://massivejs.org/) valami jó használni? Minden lekérdezésnél használjam, vagy csak a lapozási lekérdezéseknél?
2. szerkesztés: Azt hiszem, egy kicsit kitaláltam (javítson ki, ha tévedek).
tegyük fel, hogy 100 000 rekordom van:
1) Szerezd meg az utoljára beillesztett azonosítót
2) Használja ezt az utoljára beillesztett azonosítót az utolsó 10 000 rekord letöltéséhez
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) mutassa meg a 10 000 rekordot, de mentse el a következő lekérdezésben használni kívánt 10 000 rekord beszúrási azonosítóját is
4) szerezze be a következő 10 000 rekordot az új Utolsó beszúrási azonosítóval
SELECT * FROM output WHERE ID < 90000 ORDER BY ID DESC LIMIT 10000 // 90,000 is the very last insert id - 10,000