mám vědeckou databázi s aktuálně 4 300 000 záznamy. Je to vědecká databáze a API ji krmí. V červnu 2020 budu mít asi 100 000 000 záznamů.

Toto je de layout výstupu tabulky‘:

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

mimochodem, tohle jsou falešná data. Výstupem je však tabulka s 5 sloupci: ID, sensor_ID, rychlost, rychlost a směr.

to, čeho chci dosáhnout, je slušná stránkovací a filtrační metoda. Chci vytvořit webovou stránku (v nodejs), kde bude zobrazeno + 4 000 000 záznamů (prozatím), 10 000 záznamů na stránku. Také chci být schopen filtrovat na sensor_ID, rychlost, rychlost nebo směr.

prozatím mám tento dotaz pro výběr konkrétních řádků:

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

hledám nějaké informace / tipy o vytvoření slušné metody stránkování. Prozatím je to stále tiché, jak to dělám, ale myslím, že to bude mnohem pomalejší, když narazíme na + 50 000 000 záznamů.

Nejprve jsem našel tuto stránku: https://www.citusdata.com/blog/2016/03/30/five-ways-to-paginate/. Zajímá mě stránkování klíčů. Ale abych byl upřímný, nemám ponětí, jak začít.

co si myslím, že musím udělat:

Vytvořte index v poli ID:

CREATE UNIQUE INDEX index_id ON output USING btree (ID)

také jsem našel tuto stránku: https://leopard.in.ua/2014/10/11/postgresql-paginattion. Když přejdete dolů na „zlepšení #2: Metoda Hledat“, můžete vidět, že upustili klauzuli OFFSET a používají klauzuli WHERE. Také vidím, že ve svém dotazu používají Poslední ID vložení:

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

tomu úplně nerozumím. Pro první stránku Potřebuji úplně poslední insert ID. Pak přinesu 10 000 nejnovějších záznamů. Ale po tom, abych získal druhou stránku, nepotřebuji úplně poslední insert ID, potřebuji 10,000. Poslední insert ID (myslím).

může mi někdo rychle vysvětlit stránkování a filtrování.

věci, které používám: – postgresql-pgadmin (pro správu databází) – uzel.js (nejnovější verze)

díky všem! A hezký rok 2020!

upravit 1: nemám ponětí, ale mohl by massiveJS (https://massivejs.org/) být něco dobrého k použití? A měl bych ji použít na všechny dotazy, nebo pouze na dotazy stránkování?

upravit 2: Myslím, že jsem to trochu vyřešil (opravte mě, pokud se mýlím).

Řekněme, že mám 100 000 záznamů:

1) Získejte Poslední Vložené ID

2) Použijte toto poslední Vložené ID k načtení posledních 10 000 záznamů

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) Zobrazit 10 000 záznamů, ale také uložit insert ID 10 000 záznam použít v dalším dotazu

4) Získat další 10 000 záznamů s novým posledním insert id

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

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.