Paginierung in Azure Cosmos DB for NoSQL
GILT FÜR: NoSQL
In Azure Cosmos DB for NoSQL können Abfragen mehrere Seiten an Ergebnissen haben. Dieses Dokument erläutert die Kriterien, mit denen die Abfrage-Engine von Azure Cosmos DB for NoSQL entscheidet, ob Abfrageergebnisse auf mehrere Seiten aufgeteilt werden sollen. Sie können optional Fortsetzungstoken verwenden, um Abfrageergebnisse zu verwalten, die mehrere Seiten umfassen.
Abfrageausführungen
Manchmal werden Abfrageergebnisse auf mehrere Seiten aufgeteilt. Eine separate Abfrageausführung generiert die Ergebnisse jeder Seite. Wenn Abfrageergebnisse nicht in einer einzelnen Ausführung zurückgegeben werden können, teilt Azure Cosmos DB for NoSQL die Ergebnisse automatisch auf mehrere Seiten auf.
Sie können die maximale Anzahl von Elementen angeben, die von einer Abfrage zurückgegeben werden, indem Sie den MaxItemCount
festlegen. Der MaxItemCount
wird pro Anforderung angegeben und besagt, dass die Abfrage-Engine maximal diese Anzahl von Elementen zurückgeben soll. Sie können MaxItemCount
auf -1
festlegen, wenn Sie keine Beschränkung für die Anzahl der Ergebnisse pro Abfrageausführung festlegen möchten.
Darüber hinaus gibt es weitere Gründe dafür, dass die Abfrage-Engine Abfrageergebnisse möglicherweise auf mehrere Seiten aufteilen muss. Zu den Gründen gehören die folgenden:
- Der Container wurde gedrosselt, und es waren keine RUs verfügbar, um mehr Abfrageergebnisse zurückzugeben.
- Die Antwort der Abfrageausführung war zu groß.
- Die Dauer der Abfrageausführung war zu lang.
- Es war für die Abfrage-Engine effizienter, die Ergebnisse in zusätzlichen Ausführungen zurückzugeben
Die Anzahl der Elemente, die pro Abfrageausführung zurückgegeben werden, ist kleiner oder gleich MaxItemCount
. Es ist jedoch möglich, dass andere Kriterien die Anzahl der Ergebnisse eingeschränkt haben, die von der Abfrage zurückgegeben werden konnten. Wenn Sie dieselbe Abfrage mehrmals ausführen, ist die Anzahl der Seiten möglicherweise nicht immer gleich. Wenn beispielsweise eine Abfrage gedrosselt wird, sind möglicherweise weniger Ergebnisse pro Seite verfügbar, was bedeutet, dass die Abfrage zusätzliche Seiten enthält. In einigen Fällen kann es auch vorkommen, dass Ihre Abfrage eine leere Ergebnisseite zurückgibt.
Verarbeiten mehrerer Ergebnisseiten
Um akkurate Abfrageergebnisse zu gewährleisten, sollten Sie alle Seiten durchlaufen. Sie sollten die Abfragen so lange ausführen, bis keine zusätzlichen Seiten mehr vorhanden sind.
Im Folgenden finden Sie einige Beispiele für die Verarbeitung der Ergebnisse von Abfragen mit mehreren Seiten:
Fortsetzungstoken
Sie können im .NET SDK und im Java SDK optional Fortsetzungstoken als Lesezeichen für den Fortschritt der Abfrage verwenden. Azure Cosmos DB for NoSQL-Abfrageausführungen sind auf der Serverseite zustandslos und können jederzeit mit dem Fortsetzungstoken fortgesetzt werden. Für das Python SDK werden Fortsetzungstoken nur für einzelne Partitionsabfragen unterstützt. Der Partitionsschlüssel muss im options-Objekt angegeben werden, da das Vorhandensein in der Abfrage selbst nicht ausreicht.
Im Folgenden finden Sie ein Beispiel für die Verwendung von Fortsetzungstoken:
Wenn die Abfrage ein Fortsetzungstoken zurückgibt, dann stehen zusätzliche Abfrageergebnisse bereit.
In der REST-API von Azure Cosmos DB for NoSQL können Sie Fortsetzungstoken mit dem x-ms-continuation
-Header verwalten. Wie beim Abfragen mit dem .NET- oder Java-SDK bedeutet ein nicht leerer x-ms-continuation
-Antwortheader, dass die Abfrage zusätzliche Ergebnisse aufweist.
Sofern Sie dieselbe SDK-Version verwenden, laufen Fortsetzungstoken nie ab. Sie können optional die Größe eines Fortsetzungstokens einschränken. Unabhängig von der Datenmenge oder der Anzahl physischer Partitionen auf Ihrem Container geben Abfragen ein einzelnes Fortsetzungstoken zurück.
Sie können keine Fortsetzungstoken für Abfragen mit GROUP BY oder DISTINCT verwenden, da diese Abfragen eine beträchtliche Zustandsmenge speichern müssten. Bei Abfragen mit DISTINCT
können Sie Fortsetzungstoken verwenden, wenn Sie der Abfrage ORDER BY
hinzufügen.
Im Folgenden finden Sie ein Beispiel für eine Abfrage mit DISTINCT
, die ein Fortsetzungstoken verwenden könnte:
SELECT DISTINCT VALUE
e.name
FROM
employees e
ORDER BY
e.name