【问题标题】:Azure table returns null value randomlyAzure 表随机返回空值
【发布时间】:2012-11-29 16:51:28
【问题描述】:

我在 C# 中有下一个 sn-p 代码:

        var results = from g in this.context.MyStorageEventTable
                      where g.PartitionKey == partitionKey
                            && g.EventType == "MyEvent"
                      select g;
        var ev = results.FirstOrDefault();

咨询 Azure 表。该表包含超过 20000 个实体。问题是有时变量 ev 有一个空值,有时有实体对象。这是随机发生的。我知道该对象存在于表中,所以空值是错误的行为。为什么会这样?谢谢!

【问题讨论】:

  • 阅读 WATS,它具有很强的一致性,因此您报告的行为对我来说意味着您的输入对于您获得 null 返回的情况是不利的。
  • mmmm nop。值没问题,谢谢。

标签: c# .net azure azure-table-storage


【解决方案1】:

试试results.AsTableServiceQuery().FirstOrDefault()。如果这样可行,则问题是查询返回了一个延续令牌,表明还有更多数据,但您没有发出后续查询来跟踪该延续令牌并获取其余数据。您应该始终使用AsTableServiceQuery() 来免费获得持续令牌关注。

【讨论】:

  • 非常感谢!但我仍然不知道为什么这种行为是随机的。也许存储并不总是以相同的顺序返回实体集?对存储的查询具有以下形式:((PartitionKey eq '0000000005-0000016771') and (EventType eq 'MyEcent'))
  • Azure 表始终以 PK/RK 顺序返回。如果未同时指定 PK 和 RK,则对 Azure 表的任何查询都可以返回包含任意数据量的延续令牌。这可能意味着您可以获得没有返回值但带有延续令牌的响应。在这种情况下,服务器认为处理请求花费的时间太长,因此它会向客户端返回一些内容,而不是让它超时。
  • 谢谢;我发现这个信息很有趣,但坏消息:(,我试过了:var ev = results.FirstOrDefault(); var ev2 = results.AsTableServiceQuery().FirstOrDefault(); 两个变量仍然随机获得空值。跨度>
  • 提琴手 (www.fiddler2.com) 是您的朋友。如果您可以在 Fiddler 中捕获流量时重现问题(空值),您可以准确地看到从表存储返回的内容。这通常有助于弄清楚发生了什么。
  • 也许可以试试results.FirstOrDefault().AsTableServiceQuery()
【解决方案2】:

改为尝试:

results.take(1).AsTableServiceQuery().execute().firstOrDefault() 

您遇到的问题是由firstordefault 将查询转换为错误的类型引起的。

take 1 只要求 azure 中的 1 行以提高效率,以配合您的 firstordefault

【讨论】:

    【解决方案3】:

    如果问题仍然存在,请尝试:

    results.AsTableServiceQuery().Take(1).ToArray().FirstOrDefault()
    

    我遇到了类似的问题,这个解决方案对我有用。当找到结果实体或不返回任何继续标记时,此查询将跟随继续标记。

    results.AsTableServiceQuery().FirstOrDefault() 也应该遵循延续标记,但它不这样做。这是一个奇怪的行为,它也会影响 First()、Single() 和 SingleOrDefault()。在所有这些情况下,明确地期望单个实体并且不遵循延续令牌。仅当预期结果是一个集合时才会这样做。

    【讨论】:

      猜你喜欢
      • 2019-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多