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


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

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

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

1

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

2

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

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

4 66

4 ответа:

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

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

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

цитирую:

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

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

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

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

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

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

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

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

та же цена на самом деле для написания blob.

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

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

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