2016-05-03 13 views
5

Ich benutze gRPC, um einen Anruf paginieren und bin dabei, herauszufinden, die Optionen dafür tun/Approximation dafür. Ist das eine vernünftige Frage? Welche Ressourcen kann ich verwenden, um dies zu tun?Paginierung in gRPC

Antwort

1

Paginierung ist sehr ähnlich zu binären Chunking-Nutzlasten. Meine Antwort in gRPC + Image Upload ist wahrscheinlich eine Lektüre wert.

Das heißt, Seitenumbruch kann verschiedene Kompromisse haben, wie es normalerweise viel niedriger Durchsatz ist und manchmal ist es nicht so schwierig, separate Anfragen zu verwenden. Geringer Durchsatz kann verhindern, dass die Flusskontrolle so schnell einsetzt, dass sie nützlich ist. Die Verwendung separater Anforderungen ist schwieriger für vollständig dynamische Ergebnisse wie Suchergebnisse, ist jedoch möglicherweise für statische Daten wie Kinder einer Ressource kein großes Problem.

Da die gRPC-Flusssteuerung möglicherweise zu viel Puffer enthält, besteht eine weitere Option darin, Streaming zu verwenden, aber die Flusskontrolle auf Anwendungsebene einzuführen. Mit der Flusskontrolle auf Anwendungsebene würden Sie Nachrichten auf dem Stream verwenden, um die Anfrage, wie viele Antworten Sie wünschen, die nicht zu schwer zu verwenden oder zu implementieren ist. Es war die Rede davon, eine genaue nachrichtenbasierte Flusskontrolle in gRPC nativ zu unterstützen (was in diesem Fall ähnliche Ergebnisse liefern würde), aber es ist unklar, ob und wann dies passieren würde.

0

Diese Frage ist ziemlich alt, aber ich fühle, dass der Antwort etwas fehlt.

Während Streaming IMHO bevorzugt wird, habe ich Fälle, in denen "traditionelle" Paginierung sehr nützlich ist. Stellen wir uns einen user Dienst vor, der CRUD Zugriff auf einen Benutzerspeicher ermöglicht und einen ListUsers und einen SearchUsers RPC hat. Das Ergebnis, das in Seiten aufgeteilt wird, ist hier viel bequemer.

Ich persönlich benutze Googles Ansatz dazu: https://github.com/googleapis/googleapis/blob/master/google/cloud/resourcemanager/v2/folders.proto