CosmosDB中的NULL连续令牌

时间:2018-08-15 05:56:56

标签: api azure pagination azure-cosmosdb azure-cosmosdb-sqlapi

我知道,如果延续令牌为空(整个令牌json为空),则这意味着下一个请求中将不再有数据

就我而言,我检查了下一页中肯定没有更多数据,并且该令牌应该为空。但它会返回此“半”空令牌...

令牌看起来像这样:

  

“ {\”令牌\“:空,\”范围\“:{\”最小\“:\” xxxxxxxxxx \“,\”最大\“:\” xxxxxxxxxx \“}}”

仅令牌为空,但是minmax不为空,这表示什么?换句话说,我应该使用continuation == null还是continuation.token == null来查看下一页是否还有更多数据?

1 个答案:

答案 0 :(得分:2)

对于某些背景情况:

  • Cosmos DB是一个分布式数据库,其中的数据和请求在多个后端服务器之间进行分区(以将存储和吞吐量扩展到单个服务器之外)。
  • 之所以提出这一点,是因为您可能执行路由到单个分区的查询(通过在查询的WHERE / filter子句中包含分区键),以及执行跨多个分区散开的查询。
  • 在每个分区的范围内-查询结果以分页方式返回。
  • 要了解有关分区的更多信息,请参阅:https://docs.microsoft.com/en-us/azure/cosmos-db/partition-data

您看到的令牌是来自SDK的复合延续令牌,其中包含:

  • 来自Cosmos DB后端的信息,以恢复查询执行并检索特定分区上的下一页(令牌字段)
  • 后端继续令牌来自哪个分区的信息(范围字段)。

您看到的是,对于SDK所查询的特定范围,没有更多结果。

关于SDK为什么不只为延续令牌提供json空值的原因: 该SDK已到达给定分区的末尾,但是仍然需要访问其他分区以确保没有更多与您的过滤器匹配的文档/需要返回给客户端。

SDK访问完所有分区后,将返回空连续性。