Хранение таблицы Azure - Как быстро я могу сканировать на столах?

StackOverflow https://stackoverflow.com/questions/4831989

Вопрос

Каждый предупреждает, чтобы не справляться против чего -либо, кроме Rowkey или PartitionKey в хранилище таблицы Azure (ATS), чтобы вас не заставили сканироваться. Некоторое время это парализовало меня в попытке придумать точно правильные PK и RK и создать псевдо-второстепенные индексы в других таблицах, когда мне нужно было запросить что-то еще.

Тем не менее, мне приходит в голову, что я обычно сканирую на таблице в SQL Server, когда считаю подходящим.

Таким образом, возникает вопрос, как быстро я могу натолливать сканирование стола Azure. Является ли это константой в сущностях/секунду, или это зависит от размера записей и т. Д. Есть ли некоторые правила, сколько записей слишком много для сканирования таблицы, если вы хотите отзывчивое применение?

Это было полезно?

Решение

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

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

Если количество разделов/узлов, которые вы пересекаете, довольно мало, вы, вероятно, не заметите никаких проблем.

Но, пожалуйста, не цитируйте меня об этом. Я не эксперт в области хранилища лазурства. На самом деле это область лазурства, в которой я наименее знающий. :П

Другие советы

Я думаю, что Брент на 100% на деньгах, но если вы все еще чувствуете, что хотите попробовать, я могу предложить только провести некоторые тесты, чтобы узнать себя. Попробуйте включить PartitionKey в свои запросы, чтобы предотвратить перекрестные перегородки, потому что в конце дня это убийца производительности.

Таблицы Azure не оптимизированы для сканирования таблиц. Сканирование таблицы может быть приемлемым для продолжительной фоновой работы, но я бы не стал делать это, когда необходим быстрый ответ. С таблицей любого разумного размера вам придется обрабатывать токены продолжения, поскольку запрос достигает границы раздела или получает 1K результаты.

У команды Azure Storage есть Отличный пост, который объясняет цели масштабируемости. Анкет Цель пропускной способности для одного раздела таблицы составляет 500 объектов/сек. Общая цель для счета хранения составляет 5000 транзакций/сек.

Ответ - страниц. Использовать top_size - максимальное количество результатов или записей в результате- в сочетании с next_partition_key а также next_row_key Продолжение токенов. Это делает значительную ровную факторную разницу в производительности. С одной стороны, ваши результаты статистически более склонны к одному разделу. Простые результаты показывают, что наборы сгруппированы с помощью клавиши продолжения разделения, а не клавиши «Продолжение строки».

Другими словами, вам также нужно подумать о своем пользовательском интерфейсе или системе. Не беспокойтесь о возвращении более 10-20 результатов максимум 50. Пользователь, вероятно, больше не будет использовать и не изучать.

Звучит глупо. Сделайте поиск в Google «собака» и обратите внимание, что поиск возвращает только 10 пунктов. Больше не надо. Следующие записи полезны для вас, если вы нажимаете «Продолжить». Исследования доказали, что практически нет пользовательских предприятий за пределами этой первой страницы.

а select (Возвращение подмножества ключевых значений) может иметь значение; Например, используйте select = "PartitionKey,RowKey" или же 'Name' Какой бы минимум вам нужен.

«Я полагаю, что эффект пересечения этих границ также приводит к продолжению токенов, которые требуют дополнительных круговых поездок для хранения для получения результатов. Затем это приводит к снижению производительности, а также увеличению количества транзакций (и впоследствии затрат) . "

... немного неверно. Токен продолжения используется не из -за пересечения границ, а потому, что таблицы лазурных изделий допускают не более 1000 результатов; Поэтому два токена продолжения используются для следующего набора. По умолчанию top_size по сути 1000.

Для вашего удовольствия от просмотра, вот описание для объектов запросов из Azure Python API. Другие почти одинаковы.

  '''
  Get entities in a table; includes the $filter and $select options. 

  table_name: Table to query.
  filter: 
     Optional. Filter as described at 
     http://msdn.microsoft.com/en-us/library/windowsazure/dd894031.aspx
  select: Optional. Property names to select from the entities.
  top: Optional. Maximum number of entities to return.
  next_partition_key: 
     Optional. When top is used, the next partition key is stored in
     result.x_ms_continuation['NextPartitionKey']
  next_row_key: 
     Optional. When top is used, the next partition key is stored in
     result.x_ms_continuation['NextRowKey']
  '''
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top