【问题标题】:Azure Table query returns empty result with not null continuation tokenAzure 表查询返回带有非空延续令牌的空结果
【发布时间】:2016-03-31 01:07:08
【问题描述】:

正如上面所说的https://msdn.microsoft.com/en-us/library/azure/dd135718.aspx

“查询可能不返回任何结果,但仍会返回延续标头。”

所以我的问题是 - 那么调用者的行为应该是什么?

  1. 过一段时间再试一次?
  2. 将其视为结果集的结尾?
  3. 进行新的查询而不继续。基于最后检索到的数据的令牌更新过滤器?

也有人说, “针对表服务的查询一次最多可能返回 1,000 个项目,并且最多可能执行 5 秒。如果结果集包含超过 1,000 个项目,如果查询未在 5 秒内完成,或者如果查询跨越分区边界,响应包括为开发人员提供连续令牌的标头,以便在结果集中的下一个项目处恢复查询。可能会为查询表操作或查询实体操作返回连续令牌标头。”

所以看起来重试策略会在总是返回带有延续令牌的空结果时导致我们进入无限循环......

【问题讨论】:

  • 我似乎正在进入一个无限循环(或接近无限循环,因为每个结果集总是空的,所以看似任意退出)。您对重试逻辑的假设似乎是正确的,但我希望清楚最好的编程模式应该是什么。

标签: azure pagination token continuation


【解决方案1】:

您应该立即构建并使用下一个查询,并在其中传递延续令牌。如here: Query Timeout and Pagination 所述。将从上一个请求结束的位置开始搜索表存储。您得到一个空结果,因为表存储在 5 秒内没有找到任何匹配的数据,但仍有数据需要搜索。

在您检索到延续标记后,使用它们的值构造一个查询以返回下一页结果。

如果您使用 .NET 和 Microsoft.WindowsAzure.Storage 程序集,则有一个 BeginExecuteQuerySegmented 方法可以为您构建所有请求。示例:https://stackoverflow.com/a/13428086/1051244

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-26
    • 1970-01-01
    • 2013-01-26
    • 1970-01-01
    • 1970-01-01
    • 2014-12-03
    • 2021-03-18
    • 2021-11-20
    相关资源
    最近更新 更多