PHP Azure Table Storage + Time out


PHP Azure Table Storage + Time out

我正在使用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') )
    

    当分区键具有多个带有 OR 子句的值时,使用 PHP 脚本,没有响应。使用存储资源管理器应用程序 似乎从两个分区中提取 10 行需要 5 秒以上。(我只有 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>

根据 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')

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