Получить 100 элементов из хранилища таблиц Azure по известному ключу в результате ошибка HTTP 414 - PullRequest
2 голосов
/ 26 февраля 2012

Я хочу показать 100 элементов из таблицы Azure, я уже знаю PartitionKey и Rowkey, поэтому для фильтра $ что-то выглядит так:

((PartitionKey eq 'js32') and (RowKey eq '18371378441826619420')) or ((PartitionKey eq 'js53') and (RowKey eq '18371389407961060290')) or ((PartitionKey eq 'js37') and (RowKey eq '18371565010300884950')) or ((PartitionKey eq 'js64') and (RowKey eq '18371570522532718663')) or ((PartitionKey eq 'js78') and (RowKey eq '18371571234060779934')) or ((PartitionKey eq 'js18') and (RowKey eq '18371620015195251645')) or ((PartitionKey eq 'js59') and (RowKey eq '18371642621740783008')) or ((PartitionKey eq 'js27') and (RowKey eq '18371653219702884172')) or ((PartitionKey eq 'js79') and (RowKey eq '18371686842261536342')) or ((PartitionKey eq 'js25') and (RowKey eq '18371703202567992223')) or ((PartitionKey eq 'js25') and (RowKey eq '18371721921192859595')) or ((PartitionKey eq 'js40') and (RowKey eq '18371723165056625088')) or ((PartitionKey eq 'js58') and (RowKey eq '18371742515754080322')) or ((PartitionKey eq 'js59') and (RowKey eq '18371742690277511383')) or ((PartitionKey eq 'js27') and (RowKey eq '18371754349415311569')) or ((PartitionKey eq 'js41') and (RowKey eq '18371755036440371353')) or ((PartitionKey eq 'js70') and (RowKey eq '18371790002968340255'))......

Total 100 items (so 100 PartitionKey and 100 RowKey)

Но тогда я получил ошибку: HTTP Error 414. The request URL is too long.

Вы сталкивались с этой ошибкой, как вы ее решили?

Ответы [ 3 ]

2 голосов
/ 10 марта 2012

Я согласен с Дэвидом Макогоном - вам лучше написать несколько запросов.И если вы сделаете это, вы также можете использовать параллельные потоки, чтобы ускорить все это.Если вы пойдете по этому пути, сгруппируйте по ключу вашего раздела (каждый поток / соединение достигает определенного ключа / набора ключей).

С точки зрения длинных URI, IE будет поддерживать около 2k.Я не знаю, является ли это конкретным пределом для IE, или же этот предел применим и к .NET WebClient.Кроме того, имейте в виду, что даже если он работает с очень длинной строкой запроса, могут существовать прокси, которые не будут работать с такой длиной Uri.

Другое предложение - преобразовать в запросы диапазона (больше чеми меньше чем), и исключить определенные элементы, которые вам не нужны, с помощью дополнительных фрагментов запроса.Это работает, только если ваша ключевая структура такова, что имеет смысл запрос диапазона.

Erick

2 голосов
/ 26 февраля 2012

HTTP-ответ 414 не относится к хранилищу таблиц Windows Azure: он просто означает, что ваш URI запроса слишком длинный. Я никогда не сталкивался с этим, поскольку я обычно не создаю запросы, в которых несколько отдельных строк вызываются таким образом. Я не уверен, какова максимальная длина URI.

Сказав, что: этот запрос не выглядит очень эффективным, так как вы занимаетесь разделами, то есть вы получите частичные результаты с токенами продолжения (по крайней мере, это мое предположение на основе $ фрагмент фильтра вы представили). Подробнее о токенах продолжения и ответах здесь .

1 голос
/ 27 февраля 2012

Вы делаете это через REST или StorageClientLibrary?Библиотека предоставляет несколько хороших абстракций для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...