Лучше ли иметь много небольших контейнеров BLOB-объектов хранения Azure (в каждом из которых есть несколько объектов BLOB-объектов) или один действительно большой контейнер с тоннами объектов BLOB-объектов? - PullRequest
73 голосов
/ 17 ноября 2011

Итак, следующий сценарий:

У меня есть несколько экземпляров веб-службы, которая записывает большой объем данных в хранилище Azure.Мне нужно иметь возможность группировать BLOB-объекты в контейнер (или виртуальный каталог) в зависимости от того, когда он был получен.Время от времени (в худшем случае каждый день) старые двоичные объекты обрабатываются, а затем удаляются.

У меня есть два варианта:

Вариант 1

Я создаю один контейнер с именем «blobs» (например), а затем сохраняю все блоги вэтот контейнер.Каждый большой двоичный объект будет использовать имя стиля каталога с именем каталога, являющимся временем его получения (например, "hr0min0 / data.bin", "hr0min0 / data2.bin", "hr0min30 / data3.bin", "hr1min45 / data.bin", ...," hr23min0 / dataN.bin "и т. д. - новый каталог каждые X минут).Объект, который обрабатывает эти большие двоичные объекты, сначала обрабатывает большие двоичные объекты hr0min0, затем hr0minX и т. Д. (И большие двоичные объекты все еще записываются при обработке).

Вариант 2

У меня есть много контейнеров, каждый из которых имеет имя в зависимости от времени прибытия (поэтому сначала будет контейнер с именем blobs_hr0min0, затем blobs_hr0minX и т. Д.) И всекапли в контейнере - это те капли, которые прибыли в указанное время.То, что обрабатывает эти блоги, будет обрабатывать один контейнер за раз.

Итак, мой вопрос, какой вариант лучше?Вариант 2 дает мне лучшее распараллеливание (поскольку контейнеры могут быть на разных серверах) или вариант 1 лучше, потому что многие контейнеры могут вызывать другие неизвестные проблемы?

Ответы [ 4 ]

56 голосов
/ 17 ноября 2011

Каждый дал вам отличные ответы на вопрос о прямом доступе к BLOB-объектам. Тем не менее, если вам нужно составить список больших двоичных объектов в контейнере, вы, вероятно, увидите более высокую производительность с моделью с несколькими контейнерами. Я только что говорил с компанией, которая хранит огромное количество капель в одном контейнере. Они часто перечисляют объекты в контейнере, а затем выполняют действия с подмножеством этих BLOB-объектов. Они видят снижение производительности, так как время для получения полного списка увеличивается.

Это может не относиться к вашему сценарию, но это то, что нужно учитывать ...

54 голосов
/ 17 ноября 2011

Я не думаю, что это действительно имеет значение (с точки зрения масштабируемости / распараллеливания), потому что разбиение в хранилище BLOB-объектов Win Azure выполняется на уровне BLOB-объектов, а не контейнера. Причины распределения по разным контейнерам больше связаны с контролем доступа (например, SAS) или общим размером хранилища.

Подробнее см. Здесь: http://blogs.msdn.com/b/windowsazurestorage/archive/2010/05/10/windows-azure-storage-abstractions-and-their-scalability-targets.aspx

(Прокрутите вниз до «Разделов»).

Цитирование:

Blobs - Поскольку ключ раздела до имени BLOB-объекта, мы можем загрузить сбалансировать доступ к различным BLOB-объектам на нескольких серверах, чтобы расширить доступ к ним. Это позволяет контейнерам расти как большие по мере необходимости (в пределах лимита места для учетной записи хранения). компромисс в том, что мы не предоставляем возможность делать атомные транзакции через несколько BLOB-объектов.

19 голосов
/ 17 ноября 2011

Теоретически, не должно быть никакой разницы между большим количеством контейнеров или меньшим количеством контейнеров с большим количеством пятен.Дополнительные контейнеры могут быть полезны в качестве дополнительных границ безопасности (например, для публичного анонимного доступа или других подписей SAS).Дополнительные контейнеры также могут облегчить ведение домашнего хозяйства при сокращении (удаление одного контейнера по сравнению с таргетингом на каждый BLOB-объект).По этой причине я склонен использовать больше контейнеров (не для производительности).

Теоретически, влияние на производительность не должно существовать.Сам большой двоичный объект (полный URL-адрес) является ключом раздела в Windows Azure (давно).Это самая маленькая вещь, которая будет сбалансирована нагрузкой от сервера разделов.Таким образом, вы можете (и часто будете иметь) два разных больших двоичных объекта в одном контейнере, обслуживаемых разными серверами.

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

4 голосов
/ 13 октября 2017

Есть еще один фактор, который влияет на это.Цена!

В настоящее время операции List и Create контейнера выполняются по одной и той же цене: 0,054 US $ / 10.000 вызовов

На самом деле одинаковая цена для написания BLOB-объекта.

Так что в крайнем случаепотому что вы можете заплатить намного больше, если вы создаете и удаляете много контейнеров

  • удалить бесплатно

вы можете увидеть калькулятор здесь: https://azure.microsoft.com/en-us/pricing/calculator/

...