2017-10-27 8 views
0

Warum Abfrage Paginierung in Server-Bibliotheken (Java/Nodejs usw.) nicht unterstützt wird. Ich suche nach einem großen Dataset auf der Serverseite. Ähnlich wie GAE/J, vorzugsweise mit einem websicheren Cursor, der an den Client gesendet werden könnte.Firestore: Paging mit Cursor

Vielen Dank im Voraus,

Antwort

1

Die Server-SDKs etwas tun, wie Paginierung unterstützt, mit Einschränkungen.

Die Web-, Android- und iOS-SDKs ermöglichen die Verwendung eines Dokument-Snapshots als Cursor für eine Abfrage (unter Verwendung von startAfter), was wie erwartet funktioniert. Die Server-SDKs erfordern stattdessen die Angabe Werte. Wenn Ihre Werte eindeutig sind, funktioniert das einwandfrei. wenn nicht, ist es nicht sicher, weil ein Wert mit einem doppelten das letzten Element in der aktuellen Partie sein könnte:

current: 998, 999, 1000 | next: 1000, 1001, 1002 

und startAfter das erste Element überspringen würde mit (1000) der nächsten Charge der Ergebnisse.

current: 1000, 1000, 1000 | next: 1000, 1001, 1002 

Hier ist mehr auf paginating data with query cursors in Cloud-Firestor: Sie können mit startAt und unioning die Ergebnisse dieses Problem umgehen, aber wenn es mehrere der doppelten Werte als die Chargengröße sind spezifizieren Sie, könnten Sie stecken bleiben.

+0

Vielen Dank. Ich denke an folgendes für Paging. Sortieren Sie die Sammlung nach Zeitmarke und setzen Sie den Grenzwert auf , sagen Sie 100, und verwenden Sie den Zeitstempel des letzten Elements als startAt für die nächste Abfrage. Sehen Sie Probleme mit diesem Ansatz? Danke nochmal für deine Hilfe. – sowdri

+0

Hey, glücklich zu helfen. Zwei Bedenken: 1. Ich vermute, das ist unwahrscheinlich, aber Sie werden nicht 100 identische Zeitstempel haben, richtig? Sonst wirst du auf das zweite Problem stoßen, das ich beschreibe. 2. Seien Sie vorsichtig mit Zeitstempeln: Bei hoher Lautstärke können Sie bei Schreibvorgängen mit sequenziellen Werten (500 pro Sekunde, https://firebase.google.com/docs/firestore/quotas) auf das Limit stoßen. –

+0

(Und vergessen Sie nicht, dies als eine Antwort zu markieren, wenn Sie es betrachten. :)) –