Sdílet prostřednictvím


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 Azure Cosmos DB for NoSQL používá k rozhodování, jestli se mají výsledky dotazu rozdělit na více stránek. Volitelně můžete použít tokeny pokračování ke správě výsledků dotazu, které pokrývají více stránek.

Provádění dotazů

Někdy se výsledky dotazu rozdělí na více stránek. Samostatné spuštění dotazu generuje výsledky každé stránky. Pokud se výsledky dotazu nedají vrátit v jednom spuštění, Azure Cosmos DB for NoSQL automaticky rozdělí výsledky na více stránek.

Nastavením parametru MaxItemCountmůžete zadat maximální počet položek vrácených dotazem . Zadá se MaxItemCount na požadavek a řekne dotazovacímu stroji, aby vrátil tento počet položek nebo méně. Můžete nastavit MaxItemCount -1 , jestli nechcete umístit omezení počtu výsledků na provedení dotazu.

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

  • Došlo k omezení kontejneru a nebyly k dispozici ru, aby se vrátily další výsledky dotazů.
  • Odpověď spuštění dotazu byla příliš velká.
  • Čas spuštění dotazu byl příliš dlouhý.
  • Bylo efektivnější, aby dotazovací modul vrátil výsledky při dodatečných spuštěních.

Počet vrácených položek na spuštění dotazu je menší nebo roven MaxItemCount. Je ale možné, že jiná kritéria můžou omezit počet výsledků, které dotaz vrátí. Pokud stejný dotaz spustíte několikrát, nemusí být počet stránek konstantní. Pokud je například dotaz omezený, může být na stránce méně dostupných výsledků, což znamená, že dotaz má další stránky. 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ů

Pokud chcete zajistit přesné výsledky dotazu, měli byste procházet všechny stránky. Dotazy byste měli dál spouštět, 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:

Tokeny pokračování

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

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

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

V rozhraní REST API služby Azure Cosmos DB for NoSQL můžete spravovat tokeny 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 tokenů pokračování nikdy nevyprší. Volitelně můžete omezit velikost tokenu pro pokračování. Bez ohledu na množství dat nebo počtu fyzických oddílů v kontejneru dotazy vrátí jeden token pro pokračování.

Tokeny pokračování nemůžete použít pro dotazy se 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 tokenu pro pokračování:

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