0

我知道如果继续令牌为空(整个令牌 json 为空),这意味着下一个请求中将没有更多数据

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

令牌看起来像这样:

"{\"token\":null,\"range\":{\"min\":\"xxxxxxxxxx\",\"max\":\"xxxxxxxxxx\"}}"

只有token为null,但min又不为maxnull,这说明什么?换句话说,我应该使用continuation == null还是continuation.token == null查看下一页是否有更多数据?

4

1 回答 1

3

对于一些背景上下文:

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

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

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

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

至于为什么SDK不只是给延续令牌一个json null值:SDK已经到达给定分区的末尾,但仍然需要访问其他分区才能确定没有更多文档与您的过滤器匹配/需要退回给客户。

当 SDK 完成访问所有分区时,它将返回一个空延续。

于 2018-08-16T02:16:29.303 回答