Чи краще мати багато маленьких контейнерів із великими краплями Azure для зберігання (кожен з якимись краплями) або один справді великий контейнер з тоннами крапель?


81

Отже, сценарій такий:

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

У мене є два варіанти:

Варіант 1

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

Відповіді:


61

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


Будь ласка, чи потрібно якомога коротше називати краплину? (У мене "один справді великий контейнер з тоннами крапель", варіант 1 у питанні.)
nmit026

60

Кожен дав вам чудові відповіді щодо безпосереднього доступу до крапок. Однак, якщо вам потрібно перерахувати великі крапки в контейнері, швидше за все, ви побачите кращу продуктивність у моделі з багатьма контейнерами. Я щойно розмовляв з компанією, яка зберігає величезну кількість крапель в одному контейнері. Вони часто перелічують об’єкти в контейнері, а потім виконують дії щодо підмножини цих великих крапок. Вони бачать хіт продуктивності, оскільки час на отримання повного списку зростає.

Це може не стосуватися вашого сценарію, але це щось, що слід врахувати ...


1
Це хороший момент. На момент написання статті (червень 2016 р.) Я вважаю, що досі немає способу отримати підрахунок кількості крапель в контейнері, крім як отримати список усіх крапок у цьому контейнері та перевірити Countвластивість списку .
Стівен Рендс,

Чи потрібно якомога коротше називати краплину? (У мене є "один справді великий контейнер з тоннами крапель", варіант 1 у питанні.)
nmit026

Саме сценарію, якого ми намагаємось уникнути
Гленіт

21

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

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

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


4

Існує також ще один фактор, який вникає в це. Ціна!

В даний час операція "Список" та "Створити контейнер" має однакову ціну: 0,054 дзвінка США / 10 000 дзвінків

Та сама ціна фактично для написання краплі.

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

  • видалити безкоштовно

Ви можете побачити калькулятор тут: https://azure.microsoft.com/en-us/pricing/calculator/

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.