Ich sehe dieses Muster sehr.paginierte Abfragen/Iteratorrezept
Auf Server:
// Get a bounded number of results, along with a resume token to use
// for the next call. Successive calls yield a "weakly consistent" view of
// the underlying set that may or may not reflect concurrent updates.
public<T> String getObjects(
int maxObjects, String resumeToken, List<T> objectsToReturn);
Auf Client:
// An iterator wrapping repeated calls to getObjects(bufferSize, ...)
public<T> Iterator<T> getIterator(int bufferSize);
Die meisten Orte rollen ihre eigenen Versionen dieser beiden Methoden, und die Implementierungen sind überraschend schwer richtig zu machen. Es gibt viele Edge-Case-Bugs.
Gibt es ein kanonisches Rezept oder eine Bibliothek für diese Abfragen?
(Sie können einige vereinfachende Annahmen für den serverseitigen Speicher machen, z. B. T hat eine natürliche Reihenfolge).
Ich glaube nicht, das wird richtig verhalten sollte, wenn die Tabelle wird gleichzeitig geändert, da alle nachfolgenden Offsets inkonsistent sein werden. – ashm
In diesem Fall geben Sie einen zusätzlichen Parameter für die ID ein, für die die Fortsetzung von statt des Seitenzählers und des Offsets verwendet werden soll. Die Codestruktur ändert sich nicht. –