Dela via


Sidnumrering i Azure Cosmos DB för NoSQL

GÄLLER FÖR: NoSQL

I Azure Cosmos DB för NoSQL kan frågor ha flera sidor med resultat. I det här dokumentet förklaras kriterier som Azure Cosmos DB för NoSQL:s frågemotor använder för att avgöra om frågeresultat ska delas upp på flera sidor. Du kan också använda fortsättningstoken för att hantera frågeresultat som sträcker sig över flera sidor.

Frågekörningar

Ibland delas frågeresultaten upp på flera sidor. En separat frågekörning genererar varje sidas resultat. När frågeresultat inte kan returneras i en enda körning delar Azure Cosmos DB for NoSQL automatiskt upp resultaten på flera sidor.

Du kan ange det maximala antalet objekt som returneras av en fråga genom att MaxItemCountange . MaxItemCount Anges per begäran och uppmanar frågemotorn att returnera det antalet objekt eller färre. Du kan ange MaxItemCount till -1 om du inte vill sätta en gräns för antalet resultat per frågekörning.

Dessutom finns det andra orsaker till att frågemotorn kan behöva dela upp frågeresultat i flera sidor. Följande orsaker är:

  • Containern begränsades och det fanns inte tillgängliga RU:er för att returnera fler frågeresultat
  • Frågekörningens svar var för stort
  • Frågekörningens tid var för lång
  • Det var mer effektivt för frågemotorn att returnera resultat i extra körningar

Antalet objekt som returneras per frågekörning är mindre än eller lika med MaxItemCount. Det är dock möjligt att andra kriterier kan ha begränsat antalet resultat som frågan kan returnera. Om du kör samma fråga flera gånger kanske antalet sidor inte är konstant. Om en fråga till exempel begränsas kan det finnas färre tillgängliga resultat per sida, vilket innebär att frågan har extra sidor. I vissa fall är det också möjligt att frågan returnerar en tom resultatsida.

Hantera flera sidor med resultat

För att säkerställa korrekta frågeresultat bör du gå igenom alla sidor. Du bör fortsätta att köra frågor tills det inte finns några extra sidor.

Här följer några exempel för bearbetning av resultat från frågor med flera sidor:

Fortsättningstoken

I .NET SDK och Java SDK kan du välja att använda fortsättningstoken som ett bokmärke för frågans förlopp. Azure Cosmos DB för NoSQL-frågekörningar är tillståndslösa på serversidan och kan återupptas när som helst med hjälp av fortsättningstoken. För Python SDK stöds fortsättningstoken endast för enskilda partitionsfrågor. Partitionsnyckeln måste anges i alternativobjektet eftersom det inte räcker att ha den i själva frågan.

Här är några exempel på hur du använder fortsättningstoken:

Om frågan returnerar en fortsättningstoken finns det extra frågeresultat.

I Azure Cosmos DB för NoSQL:s REST API kan du hantera fortsättningstoken med x-ms-continuation huvudet. Precis som vid frågor med .NET eller Java SDK innebär det att frågan har extra resultat om svarsrubriken x-ms-continuation inte är tom.

Så länge du använder samma SDK-version upphör fortsättningstoken aldrig att gälla. Du kan också begränsa storleken på en fortsättningstoken. Oavsett mängden data eller antalet fysiska partitioner i containern returnerar frågor en enda fortsättningstoken.

Du kan inte använda fortsättningstoken för frågor med GROUP BY eller DISTINCT eftersom dessa frågor skulle kräva lagring av en betydande mängd tillstånd. För frågor med DISTINCT kan du använda fortsättningstoken om du lägger till ORDER BY i frågan.

Här är ett exempel på en fråga med DISTINCT som kan använda en fortsättningstoken:

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