Лекція 14. Windows Azure Blob, як список блоків. Приклади REST - запитів
Блоки і сторінки
Крім уже розглянутих нами основ blob - об'єктів і сховищ, необхідно так само пояснити терміни "блок" і "сторінка".
"Блок" та "сторінка" - способи організації зберігання бінарних об'єктів.
Blob -блок
Бінарний об'єкт розміром до десятків гігабайт, з метою забезпечення його ефективної завантаження, розбивається на блоки.
Блоки оптимізовані для потокової передачі інформації. Запис блоків здійснюється в два етапи: спочатку завантажуються окремі блоки інформації, які є частиною одного бінарного об'єкта, потім необхідно підтвердити додавання блоків. У перебігу процесу підтвердження можна додавати, видаляти і змінювати блоки бінарного об'єкта. При створенні блоку немає необхідності ставити його розмір, блоки просто додаються бінарним об'єкту. Також необов'язково створювати блоки в строго визначеної послідовності, упорядкувати і редагувати блоки можна пізніше.
Структура і атрибути блоку проштамповані на рис. 19.1 (середа MS SQL Server 2008)
Рис. 19.1.
Підсумовуючи вищесказане. Блок бінарних об'єктів складається з частин (блоки блоку), кожен з яких ідентифікується за ідентифікатором (ID). Створити або змінити blob-блок можна після завантаження його частин. Максимальний розмір кожної частини блоку 4Мб, сам блок бінарного об'єкта може перевищувати обсягу в 200Гб, або до 50000 частин.
Blob - сторінка
Як blob-блоки складаються з блоків, так і blob-сторінки являють собою колекцію сторінок.
При створенні сторінки необхідно вказати її граничний розмір. Додавання або оновлення blob-сторінки здійснюється за допомогою Put Page операції.
Читання і запис даних в сторінку можна почати з будь-якого довільного набору даних.
Blob - сторінка обмежена розміром 1Тб.
Структура і атрибути сторінки вказані на рис. 19.2 (середа MS SQL Server 2008)
Рис. 19.2.
Windows Azure Blob, як набір блоків
При завантаженні blob - об'єкта розміром у десятки гігабайт реалізовується наступний сценарій (рис. 19.3):
• завантаження об'єкт розбивається на блоки, максимальний розмір яких 4Мб;
• кожному блоку присвоюється унікальний ідентифікатор в межах бінарного об'єкта;
• блоки завантажуються в "хмара";
• після завантаження всіх складових блоків бінарного об'єкта, визначаються список блоків, які повинні використовуватися blob - об'єкті.
Рис. 19.3.
Доступ до blob - об'єктам, здійснюється за допомогою операцій PUT і GET.
Таким чином, Blob-блок може бути створено:
1. при розмірі менше 64Мб, він може бути завантажений за допомогою Put Blob операції;
2. при розмірі більше 64Мб, blob розбивається на частини розміром 4Мб або менше, які після завантаження збираються в певному порядку.
Приклади REST запитів
Наведемо приклади запитів для розміщення блоку PUT Block і читання blob - об'єкта Get Blob. Приклади інших REST-запитів можна знайти за посиланнями в списку матеріалів для самостійного вивчення.
У даних прикладах ім'я облікового запису позначено як <account>, робота проводиться з об'єктом "BVideo.mp4" в контейнері "video".
Також відзначимо, що для всіх рішень Windows Azure Storage введений новий HTTP-заголовок "x-ms-version". Всі зміни в API сховища реєструються як версії за допомогою цього заголовка.
Тема x-ms-version повинен бути заданий для всіх запитів до Windows Azure Storage.
PUT Block
Нижче представлений приклад REST-запиту для розміщення блоку розміром 4 Мб за допомогою операції PUT block. Параметр запиту "? Comp = block" вказує на те, що це операція PUT block. Потім задається BlockID. Параметр Content-MD5 може бути заданий для захисту від помилок передачі по мережі і забезпечення цілісності. В даному випадку, Content-MD5 - це контрольна сума MD5 даних блоку в запиті. Контрольна сума перевіряється на сервері, в разі неспівпадання повертається помилка. Параметр Content-Length (Довжина вмісту) визначає розмір вмісту блоку. Також в заголовку HTTP-запиту є заголовок авторизації, як показано нижче.
PUT <ref src = "http: // <account> .blob.core.windows.net / video /
BVideo.mp4? Comp = block & blockid = BlockId1 & timeout = 60 HTTP / 1.1
Content-Length: 4194304Content-MD5 "type =" url ">:
HUXZLQLMuI / KZ5KDcJPcOA == Authorization: SharedKey <account>:
<Key> = x-ms-date: Mon, 6 Apr 2009 17:00:25 GMTx-ms-version: 2009-04-14
<Block data>
GET Blob
Нижченаведений запит забезпечить витяг всього вмісту заданого blob. Якщо для контейнера, якому належить blob (в даному прикладі "video"), задана політика спільного використання "Private", для отримання blob необхідно пройти аутентифікацію. Якщо задана політика спільного використання "Public-Read", аутентифікація не вимагається, і заголовок аутентифікації в заголовку запиту не потрібен.
GET <ref src = "http: // <account> .blob.core.windows.net / video /
BVideo.mp4HTTP / 1.1Authorization "type =" url "/>: SharedKey
<Account>: <key> х-ms-date: Mon, 6 Apr 2009 17:00:25
GMTx-ms-version: 2009-04-14
Інтерфейс перерахування об'єктів blob - контейнера
Windows Azure Blob підтримує перерахування об'єктів контейнера бінарних об'єктів. Інтерфейс ListBlobs підтримує параметри префікса (prefix) і роздільник (delimeter), що робить можливим формування ієрархічного переліку об'єктів. Наприклад, є Blob-контейнер "Photos" бінарних об'єктів з іменами:
Work | MyFirstDay.jpeg
Work | Boss.jpeg
Work | NewProjectStart.jpeg
Friends | Party_May.jpeg
Friends | NewYear2011.jpeg
Friends | WeekendApril.jpeg
При цьому "|" використовується як роздільник, для позначення тематики фотографій, тобто для створення ієрархії імен. Запит на отримання всіх імен "каталогів" буде виглядати наступним чином:
GET <ref src = "http: // <account> .blob.windows.net / Photos
? Comp = list & delimeter = | "type =" url "/>
Відповідь на запит:
<BlobPrefix> Work </ BlobPrefix>
<BlobPrefix> Friends </ BlobPrefix>
Тег <BlobPrefix> вказує на те, що виведене значення є префіксом імені бінарного об'єкта, а не ім'ям цілком. Повторювані префікси повертаються тільки один раз. Список бінарних об'єктів, що містяться в одному "каталозі", можна отримати поєднанням параметрів "prefix" і "delimiter", наступним запитом:
GET http: // <account> .blob.windows.net / Photos? Comp = list
& Prefix = Work / & delimeter = |
Відповідь на запит:
<Blob> Work | MyFirstDay.jpeg </ Blob>
<Blob> Work | Boss.jheg </ Blob>
<Blob> Work | NewProjectStart.jpeg </ Blob>
Тег <Blob> вказує на те, що повернене ім'я є повним ім'ям бінарного об'єкта.
Також інтерфейс ListBlobs підтримує можливість повернення певної кількості записів, за допомогою параметра "maxresult".
Повертаючись до нашого прикладу, наступний запит поверне першу набір даних, при встановленому параметрі maxresult = 2:
GET <ref src = "http: // <account> .blob.windows.net / Photos
? Comp = list & prefix = Work & maxresult = 2 "type =" url "/>
Відповідь на запит:
<Blob> Work | MyFirstDay.jpeg </ Blob>
<Blob> Work | Boss.jheg </ Blob>
<NextMarker> Marker1 </ NextMarker>
У тезі <NextMarker> повертається непрозорий маркер, який може бути використаний для повернення таких результатів:
GET <ref src = "http: // <account> .blob.windows.net / Photos
? Comp = list & prefix = Work & maxresult = 2 & marker = "
type = "url" />
Marker1
Відповідь на запит:
<Blob> Work | NewProjectStart.jpeg </ Blob>
<NextMarker> </ NextMarker>
Якщо тег <NextMarker> порожній, то отримані всі результати.
Список матеріалів для самостійного вивчення
Блоки і списки
2. http://msdn.microsoft.com/en-us/library/ee691964.aspx
Windows Azure Blob. Операції з Blob - об'єктами.
1. http://msdn.microsoft.com/en-us/library/dd573356.aspx
2. http://msdn.microsoft.com/ru-ru/library/ee872420.aspx
3. http://docwiki.embarcadero.com/RADStudio/en/Windows_Azure_Blob_API
(Для ознайомлення з повним текстом статті необхідно залогінитись)