2013-10-08 5 views
0

Я использую PHP для извлечения всех строк из разделов (ов). Я использую метод ниже, чтобы получить все строкиPHP Azure Table Storage + Time out

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

Облицовочные уникальный вопрос: Если я использую один результат раздела возвращается, используя более чем один раздел с ИЛИ п не возвращает никаких результатов.

Похож мне два вопроса:

  1. раздела с или условиями, а фильтр на другой колонке вызывает что-то повернуть умственным.

  2. Существует проблема с PHP SDK (версия 2,0)

Любая помощь будет высоко оценена,

  1. Запросы имеют Partition столбец правильно использовать. д, ж, если я бегу этот вопрос (10 строк против двух разделов)

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

    Там нет ответа, когда PartitionKey имеют более одного значения с или пунктом, используя PHP скрипт. Использование приложения-проводника хранилища Кажется, что требуется более 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> 
+0

Возможный дубликат [Как получить более 1000 объектов из запроса на хранение в лазурной таблице?] (Http://stackoverflow.com/questions/18615673/how-to-get-more-than-1000-entities-from -an-azure-table-storage-query) –

+0

Я нашел, что это проблема с значением раздела, если запрос имеет более 1 значения раздела с предложением OR, сценарии занимают очень много времени, чтобы выполнить более 5 секунд даже для 10 строк. REST API не возвращает никаких записей для времени выполнения более 5 секунд. – Mark

+0

Я также обновил вопрос. – Mark

ответ

1

Основываясь на сообщении в блоге команды Windows Azure Storage - 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') 

Посмотрите, не поможет ли какая-либо из этих помощи. Вместо второго запроса вы можете запускать два отдельных запроса параллельно.