it-swarm.com.ru

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

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

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

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

Вариант 1

Я создаю один контейнер с именем "blob" (например), а затем сохраняю все блоги в этом контейнере. Каждый BLOB-объект будет использовать имя стиля каталога с именем каталога, являющимся временем его получения (например, "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 лучше, потому что многие контейнеры могут вызывать другие неизвестные проблемы?

73
encee

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

Для получения более подробной информации смотрите здесь: http://blogs.msdn.com/b/windowsazurestorage/archive/2010/05/10/windows-Azure-storage-abstractions-and-their-scalability-targets.aspx

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

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

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

54
Eugenio Pace

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

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

56
David Makogon

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

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

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

19
dunnry

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

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

Та же цена на самом деле для написания блоба.

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

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

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

4
Jiří Herník