Sidnumrering i Azure Cosmos DB for NoSQL

GÄLLER FÖR: NoSQL

I Azure Cosmos DB for NoSQL kan frågor ha flera resultatsidor. Det här dokumentet beskriver kriterier som Azure Cosmos DB för NoSQL:s frågemotor använder för att avgöra om frågeresultat ska delas upp i 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 i flera sidor.

Du kan ange det maximala antalet objekt som returneras av en fråga genom att MaxItemCountange . MaxItemCount anges per begäran och instruerar 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. Dessa 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 sida med resultat.

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 på 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 for 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 frågor med en enda partition. 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 Rest-API:et x-ms-continuation för Azure Cosmos DB för NoSQL kan du hantera fortsättningstoken med huvudet. Precis som vid frågor med .NET eller Java SDK innebär det att frågan har extra resultat om x-ms-continuation svarshuvudet inte är tomt.

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 att en betydande mängd tillstånd lagras. 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