【问题标题】:PHP Azure Table Storage + Time outPHP Azure 表存储 + 超时
【发布时间】:2013-10-15 21:09:35
【问题描述】:

我正在使用 PHP 从分区中检索所有行。我正在使用下面的方法来获取所有行

http://www.windowsazure.com/en-us/develop/php/how-to-guides/table-service/#RetEntitiesInPartition

面临一个独特的问题:如果我使用一个分区结果返回,使用多个带有 OR 子句的分区不会返回任何结果。

在我看来有两个问题:

  1. 在其他列上使用 OR 条件和过滤器进行分区导致某些事情变得精神错乱。

  2. PHP SDK(2.0 版)存在问题

任何帮助将不胜感激,

  1. 查询有一个正确使用的Partition 列。例如,如果我正在运行此查询(针对两个分区 10 行)

    ( cid eq '18831') and ( (PartitionKey eq '2013100606') or (PartitionKey eq '2013100607') )
    

    使用 PHP 脚本的 OR 子句的 partitionkey 有多个值时没有响应。使用存储资源管理器应用程序似乎需要超过 5 秒才能从两个分区中提取 10 行。 (我只有 10 行,两个分区中没有其他数据)

如果我只访问一个分区,它会返回行。

( cid eq '18831') and ( (PartitionKey eq '2013100607') )  // Works fine

每个分区有 10 行,如果我访问单个分区值,它工作正常。

另外请注意,我使用的是 expect100Continue 并且 Nagle 已关闭。

      <servicePointManager expect100Continue="false" useNagleAlgorithm="false"/> 
    </settings> 
<connectionManagement> 
      <add address = "*" maxconnection = "48" /> 
    </connectionManagement>

【问题讨论】:

  • 我发现这是分区值的问题,如果查询具有超过 1 个分区值和 OR 子句,脚本需要很长时间才能执行超过 5 秒,即使是 10 行。 REST API 不返回执行时间超过 5 秒的记录。
  • 我也更新了问题。
  • 尝试反转查询,看看是否有任何不同 - ( (PartitionKey eq '2013100606') or (PartitionKey eq '2013100607') ) and ( cid eq '18831')。
  • 做到了,但同样没有 PHP 脚本返回结果。即使我使用存储资源管理器软件运行,查询也需要 10 多秒才能运行。

标签: php azure azure-storage azure-table-storage


【解决方案1】:

根据 Windows Azure 存储团队的博文 - How to get most out of Windows Azure Tables(向下滚动到博文中的 Queries 部分,第 4 点),涉及 OR 的查询未优化,并且将导致全表扫描。因此,您可能会遇到问题。

您可能需要更改查询以避免这种情况。您可以尝试以下几种方法:

((PartitionKey ge '2013100606') and (PartitionKey le '2013100607')) and (cid eq '18831')

(PartitionKey eq '2013100606' and cid eq '18831') or (PartitionKey eq '2013100607' and cid eq '18831')

看看是否有这些帮助。您可以并行触发两个单独的查询,而不是第二个查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-20
    • 1970-01-01
    • 1970-01-01
    • 2013-02-08
    • 2018-02-16
    • 2017-11-18
    • 2014-01-01
    • 2019-03-21
    相关资源
    最近更新 更多