Delen via


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 criteria uitgelegd die de query-engine van Azure Cosmos DB for 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.

Queryuitvoeringen

Soms worden queryresultaten gesplitst over meerdere pagina's. Met een afzonderlijke queryuitvoering worden de resultaten van elke pagina gegenereerd. Wanneer queryresultaten niet in één uitvoering kunnen worden geretourneerd, splitst Azure Cosmos DB for NoSQL resultaten automatisch op in meerdere pagina's.

U kunt het maximum aantal items opgeven dat door een query wordt geretourneerd door de MaxItemCountinstelling . De MaxItemCount waarde wordt per aanvraag opgegeven en geeft aan dat de query-engine dat aantal items of minder retourneert. U kunt instellen op als u geen limiet wilt instellen MaxItemCount -1 voor het aantal resultaten per query-uitvoering.

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

  • De container is beperkt en er zijn geen RU's beschikbaar om meer queryresultaten te retourneren
  • Het antwoord van de queryuitvoering is te groot
  • De tijd van de uitvoering 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 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 beschikbare resultaten per pagina, wat betekent dat de query extra pagina's bevat. In sommige gevallen is het ook mogelijk dat uw query een lege pagina met resultaten retourneert.

Meerdere pagina's met resultaten verwerken

Om nauwkeurige queryresultaten te garanderen, moet u alle pagina's doorlopen. U moet query's blijven uitvoeren totdat er geen extra pagina's zijn.

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

Vervolgtokens

In de .NET SDK en Java SDK kunt u desgewenst vervolgtokens gebruiken als bladwijzer voor de voortgang van uw query. Uitvoeringen van Azure Cosmos DB for 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 optiesobject omdat deze niet voldoende is om deze in de query zelf te hebben.

Hier volgen enkele voorbeelden voor 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. Ongeacht de hoeveelheid gegevens of het aantal fysieke partities in uw container, retourneren query's één vervolgtoken.

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 waarmee DISTINCT een vervolgtoken kan worden gebruikt:

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