PHP Azure表存储+超时

时间:2013-10-08 19:11:40

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

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

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

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

似乎有两个问题:

  1. 使用OR条件进行分区并对其他列进行过滤会导致某些事情发生变化。

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

  3. 任何帮助都将受到高度赞赏,

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

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

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

    2. 如果我只访问一个分区,则返回行。

      ( 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 个答案:

答案 0 :(得分: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')

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