Paginering in Azure Cosmos DB for NoSQL

VAN TOEPASSING OP: NoSQL

In Azure Cosmos DB for NoSQL kunnen query's meerdere pagina's met resultaten bevatten. In dit document worden de criteria uitgelegd die de query-engine van Azure Cosmos DB voor NoSQL gebruikt om te bepalen of queryresultaten moeten worden gesplitst in meerdere pagina's. U kunt eventueel vervolgtokens gebruiken om queryresultaten te beheren die meerdere pagina's omvatten.

Query-uitvoeringen

Soms worden queryresultaten verdeeld over meerdere pagina's. Een afzonderlijke query-uitvoering genereert de resultaten van elke pagina. Wanneer queryresultaten niet in één uitvoering kunnen worden geretourneerd, worden de resultaten automatisch gesplitst in meerdere pagina's in Azure Cosmos DB voor NoSQL.

U kunt het maximum aantal items opgeven dat door een query wordt geretourneerd door de MaxItemCountin te stellen. De MaxItemCount wordt opgegeven per aanvraag en vertelt de query-engine dat het aantal items of minder moet worden geretourneerd. U kunt instellen MaxItemCount op -1 als u geen limiet wilt instellen voor het aantal resultaten per query-uitvoering.

Daarnaast zijn er andere redenen waarom de query-engine queryresultaten mogelijk moet splitsen in meerdere pagina's. Deze redenen zijn onder andere:

  • De container is beperkt en er waren geen beschikbare RU's om meer queryresultaten te retourneren
  • Het antwoord van de queryuitvoering was te groot
  • De tijd voor het uitvoeren van de query was te lang
  • Het was efficiënter voor de query-engine om resultaten te retourneren in extra uitvoeringen

Het aantal items dat per query-uitvoering wordt geretourneerd, is kleiner dan of gelijk aan MaxItemCount. Het is echter mogelijk dat andere criteria het aantal resultaten hebben beperkt dat de query kan retourneren. Als u dezelfde query meerdere keren uitvoert, is het aantal pagina's mogelijk niet constant. Als een query bijvoorbeeld wordt beperkt, zijn er mogelijk minder resultaten per pagina beschikbaar, wat betekent dat de query extra pagina's heeft. In sommige gevallen is het ook mogelijk dat uw query een lege pagina met resultaten retourneert.

Meerdere pagina's met resultaten verwerken

Voor nauwkeurige queryresultaten moet u alle pagina's doorlopen. U moet doorgaan met het uitvoeren van query's totdat er geen extra pagina's zijn.

Hier volgen enkele voorbeelden van het verwerken van resultaten van query's met meerdere pagina's:

Vervolgtokens

In de .NET SDK en Java SDK kunt u eventueel vervolgtokens gebruiken als bladwijzer voor de voortgang van uw query. Uitvoeringen van Azure Cosmos DB voor NoSQL-query's zijn staatloos aan de serverzijde en kunnen op elk gewenst moment worden hervat met behulp van het vervolgtoken. Voor de Python SDK worden vervolgtokens alleen ondersteund voor query's met één partitie. De partitiesleutel moet worden opgegeven in het object options omdat het niet voldoende is om deze in de query zelf te hebben.

Hier volgt een voorbeeld van het gebruik van vervolgtokens:

Als de query een vervolgtoken retourneert, zijn er extra queryresultaten.

In de REST API van Azure Cosmos DB for NoSQL kunt u vervolgtokens beheren met de x-ms-continuation header. Net als bij het uitvoeren van query's met de .NET- of Java SDK, betekent dit dat de query extra resultaten heeft als de x-ms-continuation antwoordheader niet leeg is.

Zolang u dezelfde SDK-versie gebruikt, verlopen vervolgtokens nooit. U kunt eventueel de grootte van een vervolgtoken beperken. Query's retourneren één vervolgtoken, ongeacht de hoeveelheid gegevens of het aantal fysieke partities in uw container.

U kunt geen vervolgtokens gebruiken voor query's met GROUP BY of DISTINCT , omdat voor deze query's een aanzienlijke hoeveelheid status moet worden opgeslagen. Voor query's met DISTINCT kunt u vervolgtokens gebruiken als u ORDER BY toevoegt aan de query.

Hier volgt een voorbeeld van een query met DISTINCT die een vervolgtoken kan gebruiken:

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