mam naukową bazę danych z obecnie 4,300,000 rekordów. To naukowa baza danych, a API ją zasila. W czerwcu 2020 r. prawdopodobnie będę miał około 100 000 000 rekordów.

to jest de layout tabeli '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...

BTW, to są fałszywe dane. Ale wyjście jest tabelą z 5 kolumnami: ID, sensor_ID, prędkość, prędkość i kierunek.

to, co chcę osiągnąć, to przyzwoita paginacja i metoda filtrowania. Chcę stworzyć stronę internetową (w nodejs), gdzie będzie wyświetlane +4 000 000 rekordów (na razie), 10 000 rekordów na stronę. Chcę też mieć możliwość filtrowania na sensor_ID, prędkości, prędkości lub kierunku.

na razie mam to zapytanie do wybierania konkretnych wierszy:

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

szukam informacji/wskazówek na temat tworzenia przyzwoitej metody paginacji. Na razie jest cichy, tak jak ja to robię, ale myślę, że będzie o wiele wolniej, gdy uderzymy +50 000 000 płyt.

przede wszystkim znalazłem tę stronę: https://www.citusdata.com/blog/2016/03/30/five-ways-to-paginate/. Interesuje mnie paginacja keyset. Ale szczerze mówiąc, nie mam pojęcia, jak zacząć.

co myślę, że muszę zrobić:

Utwórz indeks na polu ID:

CREATE UNIQUE INDEX index_id ON output USING btree (ID)

znalazłem też tę stronę: https://leopard.in.ua/2014/10/11/postgresql-paginattion. Kiedy przewijasz w dół do „Improvement # 2: The Seek Method”, widzisz, że upuścili klauzulę OFFSET i używają klauzuli WHERE. Widzę również, że używają ostatnio wstawionego identyfikatora w zapytaniu:

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

nie do końca to Rozumiem. Na pierwszej stronie potrzebuję ostatniego identyfikatora wstawiania. Potem przyniosę 10,000 najnowszych płyt. Ale potem, aby uzyskać drugą stronę, nie potrzebuję ostatniego ID wstawiania, potrzebuję 10 000 ostatniego ID wstawiania (chyba).

czy ktoś może mi dać dobre wyjaśnienie na temat paginacji i filtrowania w szybki sposób.

rzeczy, których używam:- postgresql-pgAdmin (do zarządzania bazami danych) – node.js (najnowsza wersja)

dzięki wszystkim! I miłego 2020 roku!

EDIT 1: nie mam pojęcia, ale czy massiveJS (https://massivejs.org/) może być czymś dobrym do użycia? I czy powinienem używać go na wszystkich zapytaniach, czy tylko na zapytaniach paginacji?

edycja 2: Myślę, że trochę to rozgryzłem (popraw mnie, jeśli się mylę).

powiedzmy, że mam 100 000 rekordów:

1) Uzyskaj ostatnio wstawiony identyfikator

2) Użyj tego ostatnio wstawionego identyfikatora, aby pobrać ostatnie 10 000 rekordów

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) Pokaż 10 000 rekordów, ale także Zapisz identyfikator wstawiania 10 000 rekordu do użycia w następnym zapytaniu

4) Uzyskaj następne 10 000 rekordów z nowym ostatnim ID wstawiania

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

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.