Stronicowanie w usłudze Azure Cosmos DB dla NoSQL

DOTYCZY: NoSQL

W usłudze Azure Cosmos DB dla 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 obejmującymi wiele stron.

Wykonania zapytań

Czasami wyniki zapytania są dzielone na wiele stron. Oddzielne wykonanie zapytania generuje wyniki każdej strony. Gdy nie można zwrócić wyników zapytania 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 nakazuje aparatowi zapytań zwrócenie tej liczby elementów lub mniejszej liczby elementów. Możesz ustawić wartość na -1 , jeśli nie chcesz nakładać MaxItemCount 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 wykonujesz to samo zapytanie wiele razy, liczba stron może nie być stała. Jeśli na przykład zapytanie jest ograniczone, na stronę może być mniej dostępnych wyników, 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. Wykonywanie zapytań powinno być kontynuowane do momentu, gdy nie będzie żadnych dodatkowych stron.

Oto kilka przykładów przetwarzania wyników zapytań z wieloma stronami:

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 mieć go w samym zapytaniu.

Oto przykład użycia tokenów kontynuacji:

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