Stránkování ve službě Azure Cosmos DB for NoSQL

PLATÍ PRO: NoSQL

Ve službě Azure Cosmos DB for NoSQL můžou mít dotazy více stránek výsledků. Tento dokument vysvětluje kritéria, která dotazovací modul služby Azure Cosmos DB for NoSQL používá k rozhodování, jestli se mají výsledky dotazů rozdělit na více stránek. Volitelně můžete tokeny pro pokračování použít ke správě výsledků dotazů, které se rozprostírá na více stránkách.

Spouštění dotazů

Někdy jsou výsledky dotazu rozdělené na více stránek. Výsledky každé stránky se generují pomocí samostatného spuštění dotazu. Pokud se výsledky dotazu nedají vrátit v jednom spuštění, Azure Cosmos DB for NoSQL výsledky automaticky rozdělí na několik stránek.

Maximální počet položek vrácených dotazem můžete zadat nastavením MaxItemCount. Parametr MaxItemCount se zadává pro každý požadavek a říká dotazovacímu modulu, aby vrátil tento počet položek nebo méně. Pokud nechcete omezit počet výsledků na spuštění dotazu, můžete ho nastavit MaxItemCount-1 na hodnotu .

Kromě toho existují další důvody, proč dotazovací modul může potřebovat rozdělit výsledky dotazu na více stránek. Mezi tyto důvody patří:

  • Kontejner se omezil a nebyly dostupné RU pro vrácení dalších výsledků dotazu.
  • Odpověď spuštění dotazu byla příliš velká.
  • Doba provádění dotazu byla příliš dlouhá.
  • Efektivnější bylo, aby dotazovací modul vracel výsledky v dalších spuštěních.

Počet položek vrácených při spuštění dotazu je menší nebo roven hodnotě MaxItemCount. Je však možné, že počet výsledků vrácených dotazem mohl omezit jiná kritéria. Pokud stejný dotaz spustíte vícekrát, nemusí být počet stránek konstantní. Pokud je například dotaz omezený, může být na stránce k dispozici méně výsledků, což znamená, že dotaz má stránky navíc. V některých případech je také možné, že dotaz vrátí prázdnou stránku výsledků.

Zpracování více stránek výsledků

Abyste zajistili přesné výsledky dotazů, měli byste procházet všechny stránky. Měli byste pokračovat v provádění dotazů, dokud nebudou k dispozici žádné další stránky.

Tady je několik příkladů zpracování výsledků z dotazů s více stránkami:

Pokračovací tokeny

V sadě .NET SDK a Java SDK můžete volitelně použít tokeny pro pokračování jako záložku pro průběh dotazu. Spouštění dotazů Azure Cosmos DB for NoSQL je na straně serveru bezstavové a je možné ho kdykoli obnovit pomocí pokračovacího tokenu. V případě sady Python SDK se tokeny pro pokračování podporují pouze u dotazů s jedním oddílem. Klíč oddílu musí být zadaný v objektu options, protože nestačí, aby byl v samotném dotazu.

Tady je několik příkladů použití tokenů pro pokračování:

Pokud dotaz vrátí pokračovací token, jsou k dispozici další výsledky dotazu.

V rozhraní REST API služby Azure Cosmos DB for NoSQL můžete spravovat tokeny pro pokračování pomocí hlavičky x-ms-continuation . Stejně jako u dotazování pomocí sady .NET nebo Java SDK platí, že pokud x-ms-continuation hlavička odpovědi není prázdná, znamená to, že dotaz má další výsledky.

Pokud používáte stejnou verzi sady SDK, platnost pokračovacího tokenu nikdy nevyprší. Volitelně můžete omezit velikost pokračovacího tokenu. Bez ohledu na množství dat nebo počet fyzických oddílů v kontejneru vrací dotazy jeden pokračovací token.

Tokeny pro pokračování nemůžete použít pro dotazy s funkcí GROUP BY nebo DISTINCT , protože tyto dotazy by vyžadovaly uložení značného množství stavu. U dotazů s klauzulí DISTINCT můžete používat tokeny pro pokračování v případě, že do dotazu přidáte klauzuli ORDER BY.

Tady je příklad dotazu s DISTINCT použitím pokračovacího tokenu:

SELECT DISTINCT VALUE
    e.name
FROM
    employees e
ORDER BY
    e.name