Ich habe eine wissenschaftliche Datenbank mit derzeit 4.300.000 Datensätzen. Es ist eine wissenschaftliche Datenbank, und eine API füttert sie. Im Juni 2020 werde ich wahrscheinlich ungefähr 100.000.000 Datensätze haben.

Dies ist das Layout der Tabelle ‚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, das sind Dummy-Daten. Die Ausgabe ist jedoch eine Tabelle mit 5 Spalten: ID, sensor_ID, Geschwindigkeit, Geschwindigkeit und Richtung.

Was ich erreichen möchte, ist eine anständige Paginierungs- und Filtermethode. Ich möchte eine Website (in nodejs) erstellen, auf der diese +4.000.000 Datensätze (vorerst) angezeigt werden, 10.000 Datensätze pro Seite. Ich möchte auch in der Lage sein, nach sensor_ID, Geschwindigkeit, Geschwindigkeit oder Richtung zu filtern.

Im Moment habe ich diese Abfrage zum Auswählen bestimmter Zeilen:

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

Ich suche nach Informationen / Tipps zum Erstellen einer anständigen Paginierungsmethode. Im Moment ist es immer noch ziemlich schnell, wie ich es mache, aber ich denke, es wird viel langsamer sein, wenn wir +50.000.000 Datensätze erreichen.

Zuerst fand ich diese Seite: https://www.citusdata.com/blog/2016/03/30/five-ways-to-paginate/. Ich interessiere mich für die Keyset-Paginierung. Aber um ehrlich zu sein, ich habe keine Ahnung, wie ich anfangen soll.

Was ich denke, muss ich tun:

Erstellen Sie einen Index für das ID-Feld:

CREATE UNIQUE INDEX index_id ON output USING btree (ID)

Ich habe auch diese Seite gefunden: https://leopard.in.ua/2014/10/11/postgresql-paginattion. Wenn Sie zu „Verbesserung 2: Die Suchmethode“ scrollen, können Sie sehen, dass die OFFSET-Klausel gelöscht wurde und eine WHERE-Klausel verwendet wird. Ich sehe auch, dass sie die letzte Einfüge-ID in ihrer Abfrage verwenden:

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

Ich verstehe das nicht ganz. Für die erste Seite benötige ich die allerletzte Einfüge-ID. Dann hole ich die 10.000 neuesten Datensätze. Aber danach brauche ich, um die zweite Seite zu erhalten, nicht die allerletzte Einfüge-ID, sondern die 10.000ste letzte Einfüge-ID (denke ich).

Kann mir jemand schnell eine gute Erklärung zur Paginierung und Filterung geben.

Das Zeug, das ich benutze: – postgresql- pgadmin (für die Datenbankverwaltung) – Knoten.js (neueste Version)

Danke an alle! Und ein schönes 2020!

EDIT 1: Ich habe keine Ahnung, aber könnte massiveJS (https://massivejs.org/) etwas Gutes sein? Und sollte ich es für ALLE Abfragen oder nur für die Paginierungsabfragen verwenden?

BEARBEITEN 2: Ich GLAUBE, ich habe es ein wenig herausgefunden (korrigiere mich, wenn ich falsch liege).

Angenommen, ich habe 100.000 Datensätze:

1) Holen Sie sich die zuletzt eingefügte ID

2) Verwenden Sie diese zuletzt eingefügte ID, um die letzten 10.000 Datensätze abzurufen

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) Zeigen Sie die 10.000 Datensätze an, speichern Sie aber auch die Einfüge-ID der 10.000 Datensätze, die in der nächsten Abfrage verwendet werden sollen

4) Holen Sie sich die nächsten 10.000 Datensätze mit der neuen letzten Einfüge-ID

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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.