Введение в облачные решения Microsoft

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-блок может быть создан:

  • при размере меньше 64Мб, он может быть загружен при помощи Put Blob операции;
  • при размере более 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=listdelimeter=|" 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=listprefix=Workmaxresult=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=listprefix=Workmaxresult=2marker= " 
    type="url"/>
    Marker1
    Ответ на запрос:
    <Blob> Work|NewProjectStart.jpeg </Blob>
    <NextMarker> </NextMarker>

    Если тег <NextMarker> пуст, то получены все результаты.

    Список материалов для самостоятельного изучения

    Блоки и списки

  • http://blog.richard.parker.name/2010/06/30/an-introduction-to-windows-azure-for-busy-people/#BlocksAndPages
  • http://msdn.microsoft.com/en-us/library/ee691964.aspx
  • Windows Azure Blob. Операции с Blob - объектами.

  • http://msdn.microsoft.com/en-us/library/dd573356.aspx
  • http://msdn.microsoft.com/ru-ru/library/ee872420.aspx
  • http://docwiki.embarcadero.com/RADStudio/en/Windows_Azure_Blob_API
  • Страницы:

    Блоки и страницы

    Кроме уже рассмотренных нами основ 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-блок может быть создан:

  • при размере меньше 64Мб, он может быть загружен при помощи Put Blob операции;
  • при размере более 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=listdelimeter=|" 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=listprefix=Workmaxresult=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=listprefix=Workmaxresult=2marker= " 
    type="url"/>
    Marker1
    Ответ на запрос:
    <Blob> Work|NewProjectStart.jpeg </Blob>
    <NextMarker> </NextMarker>

    Если тег <NextMarker> пуст, то получены все результаты.

    Список материалов для самостоятельного изучения

    Блоки и списки

  • http://blog.richard.parker.name/2010/06/30/an-introduction-to-windows-azure-for-busy-people/#BlocksAndPages
  • http://msdn.microsoft.com/en-us/library/ee691964.aspx
  • Windows Azure Blob. Операции с Blob - объектами.

  • http://msdn.microsoft.com/en-us/library/dd573356.aspx
  • http://msdn.microsoft.com/ru-ru/library/ee872420.aspx
  • http://docwiki.embarcadero.com/RADStudio/en/Windows_Azure_Blob_API
  • Вернуться к учебному плану