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

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

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

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

Вариант 1

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

Вариант 2

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

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

Ответ 1

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

Ответ 2

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

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

Ответ 3

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

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

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

Ответ 4

В этом есть еще один фактор. Цена!

В настоящее время список операций и Создать контейнер по той же цене: 0,054 доллара США /10 000 звонков

Та же цена фактически предназначена для написания blob.

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

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

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