Stronicowanie w usłudze Azure Cosmos DB for NoSQL
DOTYCZY: NoSQL
W usłudze Azure Cosmos DB for NoSQL zapytania mogą mieć wiele stron wyników. W tym dokumencie wyjaśniono kryteria używane przez aparat zapytań usługi Azure Cosmos DB for NoSQL w celu określenia, czy należy podzielić wyniki zapytania na wiele stron. Opcjonalnie możesz użyć tokenów kontynuacji do zarządzania wynikami zapytania, które obejmują wiele stron.
Wykonywanie zapytań
Czasami wyniki zapytania są dzielone na wiele stron. Oddzielne wykonanie zapytania generuje wyniki każdej strony. Gdy wyniki zapytania nie mogą być zwracane w jednym wykonaniu, usługa Azure Cosmos DB for NoSQL automatycznie dzieli wyniki na wiele stron.
Możesz określić maksymalną liczbę elementów zwracanych przez zapytanie, ustawiając wartość MaxItemCount
. Parametr MaxItemCount
jest określony na żądanie i informuje aparat zapytań o zwrócenie tej liczby elementów lub mniej. Możesz ustawić wartość MaxItemCount
na -1
, jeśli nie chcesz użyć limitu liczby wyników na wykonanie zapytania.
Ponadto istnieją inne przyczyny, dla których aparat zapytań może wymagać podzielenia wyników zapytania na wiele stron. Oto następujące przyczyny:
- Kontener został ograniczony i nie było dostępnych jednostek RU, aby zwrócić więcej wyników zapytania
- Odpowiedź wykonania zapytania była zbyt duża
- Czas wykonywania zapytania był zbyt długi
- Aparat zapytań był bardziej wydajny, aby zwracał wyniki w dodatkowych wykonaniach
Liczba zwracanych elementów na wykonanie zapytania jest mniejsza lub równa MaxItemCount
. Istnieje jednak możliwość, że inne kryteria mogą mieć ograniczoną liczbę wyników, które może zwrócić zapytanie. Jeśli wykonasz to samo zapytanie wiele razy, liczba stron może nie być stała. Jeśli na przykład zapytanie jest ograniczane, może istnieć mniej dostępnych wyników na stronę, co oznacza, że zapytanie ma dodatkowe strony. W niektórych przypadkach zapytanie może również zwrócić pustą stronę wyników.
Obsługa wielu stron wyników
Aby zapewnić dokładne wyniki zapytania, należy przejść przez wszystkie strony. Należy kontynuować wykonywanie zapytań, dopóki nie będzie żadnych dodatkowych stron.
Oto kilka przykładów przetwarzania wyników z zapytań z wieloma stronami:
- Zestaw SDK platformy .NET
- Zestaw SDK Java
- Zestaw SDK dla platformy Node.js
- Zestaw SDK dla języka Python
Tokeny kontynuacji
W zestawie SDK platformy .NET i zestawie JAVA SDK możesz opcjonalnie używać tokenów kontynuacji jako zakładki na potrzeby postępu zapytania. Wykonania zapytań usługi Azure Cosmos DB for NoSQL są bezstanowe po stronie serwera i można je wznowić w dowolnym momencie przy użyciu tokenu kontynuacji. W przypadku zestawu SDK języka Python tokeny kontynuacji są obsługiwane tylko w przypadku zapytań z jedną partycją. Klucz partycji musi być określony w obiekcie options, ponieważ nie wystarczy, aby miał go w samym zapytaniu.
Oto przykład użycia tokenów kontynuacji:
- Zestaw SDK platformy .NET
- Zestaw SDK Java
- Zestaw SDK dla platformy Node.js
- Zestaw SDK dla języka Python
Jeśli zapytanie zwraca token kontynuacji, istnieją dodatkowe wyniki zapytania.
W interfejsie API REST usługi Azure Cosmos DB for NoSQL można zarządzać tokenami kontynuacji za pomocą nagłówka x-ms-continuation
. Podobnie jak w przypadku wykonywania zapytań za pomocą zestawu SDK platformy .NET lub Java, jeśli x-ms-continuation
nagłówek odpowiedzi nie jest pusty, oznacza to, że zapytanie ma dodatkowe wyniki.
Dopóki używasz tej samej wersji zestawu SDK, tokeny kontynuacji nigdy nie wygasają. Opcjonalnie można ograniczyć rozmiar tokenu kontynuacji. Niezależnie od ilości danych lub liczby partycji fizycznych w kontenerze zapytania zwracają pojedynczy token kontynuacji.
Nie można używać tokenów kontynuacji dla zapytań z funkcją GROUP BY lub DISTINCT , ponieważ te zapytania wymagają przechowywania znacznej ilości stanu. W przypadku zapytań z DISTINCT
można użyć tokenów kontynuacji pod warunkiem dodania elementu ORDER BY
do zapytania.
Oto przykład zapytania, które DISTINCT
może używać tokenu kontynuacji:
SELECT DISTINCT VALUE
e.name
FROM
employees e
ORDER BY
e.name