適用于 NoSQL 的 Azure Cosmos DB 編頁

適用於:NoSQL

在適用于 NoSQL 的 Azure Cosmos DB 中,查詢可能會有多個頁面的結果。 本檔說明適用于 NoSQL 的 Azure Cosmos DB 查詢引擎用來決定是否要將查詢結果分割成多個頁面的準則。 您可以選擇性地使用接續權杖來管理跨越多個頁面的查詢結果。

查詢執行

有時候會分割多個頁面的查詢結果。 個別的查詢執行會產生每個頁面的結果。 當單一執行中無法傳回查詢結果時,適用于 NoSQL 的 Azure Cosmos DB 會自動將結果分割成多個頁面。

您可以藉由設定 MaxItemCount 來指定查詢所傳回的項目數上限。 MaxItemCount 是針對每個要求所指定,並告知查詢引擎傳回該數量的項目或較少的項目。 如果您不想限制每個查詢執行的結果數目,您可以將 MaxItemCount 設定為 -1

此外,查詢引擎還有其他原因可能需要將查詢結果分割成多個頁面。 這些原因包括:

  • 容器已進行節流,而且沒有可用的 RU 可傳回更多查詢結果
  • 查詢執行的回應太大
  • 查詢執行的時間太長
  • 查詢引擎傳回額外執行的結果更有效率

每個查詢執行傳回的專案數目小於或等於 MaxItemCount 。 不過,其他準則可能會限制查詢可能傳回的結果數目。 如果您多次執行相同的查詢,則頁面數目可能不會是常數。 例如,如果查詢已節流,則每個頁面的可用結果可能較少,這表示查詢有額外的頁面。 在某些情況下,您的查詢也可能傳回空白的結果頁面。

處理多個結果頁面

為了確保正確的查詢結果,您應該進行所有頁面的進度。 您應該繼續執行查詢,直到沒有額外的頁面為止。

以下是使用多個頁面處理查詢結果的一些範例:

接續權杖

在 .NET SDK 和 JAVA SDK 中,您可以選擇性地使用接續權杖作為查詢進度的書簽。 適用于 NoSQL 的 Azure Cosmos DB 查詢執行在伺服器端是無狀態的,而且可以隨時使用接續權杖繼續執行。 針對 Python SDK,只有單一分割區查詢才支援接續權杖。 您必須在選項物件中指定分割區索引鍵,因為僅在查詢本身中指定是不夠的。

以下是使用接續權杖的一些範例:

如果查詢傳回接續權杖,則會有額外的查詢結果。

在適用于 NoSQL 的 Azure Cosmos DB REST API 中,您可以使用 標頭來管理接續權杖 x-ms-continuation 。 如同使用 .NET 或 JAVA SDK 進行查詢時,如果 x-ms-continuation 回應標頭不是空的,表示查詢會有額外的結果。

只要您使用相同的 SDK 版本,接續權杖永遠不會過期。 您可以選擇性地限制接續權杖的大小。 無論您容器中的資料量或實體分割區數目為何,查詢都會傳回單一的接續權杖。

您無法針對 GROUP BYDISTINCT 的查詢使用接續權杖,因為這些查詢需要儲存大量的狀態。 針對使用 DISTINCT 的查詢,您可以在將 ORDER BY 新增至查詢時使用接續標記。

以下是具有 DISTINCT 且可使用接續權杖的查詢範例:

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