Опубликован: 25.05.2011 | Уровень: специалист | Доступ: свободно
Лекция 8:

Azure Services Platform. Часть 2

< Лекция 7 || Лекция 8: 12345 || Лекция 9 >

Windows Azure Blob поддерживает условные PUT и GET, которые обеспечивают реализацию эффективной обработки параллелизма и клиентского кэширования.

Условный PUT может использоваться в ситуациях, когда один blob обновляется несколькими пользователями. Например, загрузка blob может выполняться на основании времени последнего изменения; это гарантирует, что версия изменяемого blob аналогична версии, которую изменяет клиент. Так может быть реализован совместный доступ с нежесткой блокировкой. Скажем, два клиента, А и В, обновляют один и тот же blob. Они параллельно выполняют чтение версии blob, вносят в нее какие-то изменения и вновь загружают в хранилище. В этом сценарии каждый из клиентов записывает время последнего изменения извлеченного из хранилища blob (пусть время последнего изменения будет Х). Когда они готовы загрузить обновленную версию blob назад в хранилище, они делают это с помощью условного PUT на основании сохраненного при извлечении blob времени последнего изменени я. В операции должно быть определено, что условием выполнения PUT является "если не изменялся с момента Х". Таким образом, если blob был изменен другим клиентом в промежуток времени с момента Х, операция обновления даст сбой, и клиент получит уведомление об этом.

Условный GET может использоваться для эффективной обработки вопросов соответствия содержимого кэшей. Например, клиент имеет локальный кэш объектов blob, в котором кэшируются чаще всего извлекаемые из хранилища blob. Для каждого кэшированного blob записывается время его последнего изменения. Когда клиентский кэш принимает решение обновить объекты blob из хранилища, он может использовать условный GET на основании времени изменения (с условием "если изменен с момента Х"). Таким образом, из хранилища будут загружаться только те объекты blob, которые были изменены в период времени, прошедший с момента Х, и отличаются от своей кэшированной копии.

Система Blob обеспечивает интерфейс для перечисления объектов blob контейнера. Поддерживается иерархический перечень объектов blob контейнера и механизм продолжения, что позволяет выполнять перечисление большого количества объектов blob.

Интерфейс ListBlobs поддерживает параметры "prefix" (префикс) и "delimiter" (разделитель), которые обеспечивают возможность построения иерархического перечня объектов blob. Например, пусть в учетной записи "sally" имеется контейнер "movies" объектов blob с такими именами:

Action/Rocky1.wmv  
 Action/Rocky2.wmv  
 Action/Rocky3.wmv  
 Action/Rocky4.wmv  
 Action/Rocky5.wmv  
 Drama/Crime/GodFather1.wmv  
 Drama/Crime/GodFather2.wmv  
 Drama/Memento.wmv  
 Horror/TheBlob.wmv

Как видите, "/" используется в качестве разделителя для создания подобной каталогу иерархии имен blob. Чтобы получить список всех "папок", задаем в запросе ListBlobs "delimiter=/". И вот как будет выглядеть запрос и часть ответа:

Запрос:

GET http://sally.blob.windows.net/movies?comp=list&delimiter=/

Ответ:

<BlobPrefix>Action</BlobPrefix>  
 <BlobPrefix>Drama</BlobPrefix>  
 <BlobPrefix>Horror</BlobPrefix>

Обратите внимание, тег "BlobPrefix" указывает на то, что соответствующая запись является префиксом имени blob, а не полным именем blob. Также следует заметить, что один и тот же префикс возвращается в результате только один раз.

Следующим этапом можно сочетать префикс и разделитель для получения списка содержимого "подпапки". Например, задавая "prefix=Drama/" и "delimiter=/", получаем список всех подпапок и файлов каталога "Drama":

Запрос:

GET  http://sally.blob.windows.net/movies?comp=list &prefix=Drama/ &delimiter=/

Ответ:

<BlobPrefix>Drama/Crime</BlobPrefix>  
<Blob>Drama/Memento.wmv</Blob>

Обратите внимание, что "Drama/Memento.wmv" – это полное имя blob, следовательно, оно так и обозначено.

Интерфейс ListBlobs обеспечивает возможность задавать "maxresults", т.е. максимальное число результатов, которое должно быть возвращено в этом вызове. Более того, система определяет верхний предел для максимального числа результатов, которые могут быть возвращены одним вызовом (более подробную информацию об этом можно найти в документации по SDK). По достижении меньшего из этих двух предельных значений вызов возвращается с соответствующим количеством результатов и непрозрачным "NextMarker" (маркер следующего). Наличие этого маркера свидетельствует о том, что данный запрос не обеспечил возвращения всех возможных результатов. "NextMarker" может использоваться для продолжения составления списка для следующей страницы результатов.

В предыдущем примере предположим, что требуется составить список всех объектов blob каталога "Action", возвращая каждый раз максимум по 3 результата. В этом случае первый набор результатов был бы таким:

Запрос:

GET http://sally.blob.windows.net/movies?comp=list &prefix=Action &maxresults=3 \

Ответ:

<Blob>Action/Rocky1.wmv</Blob>  
 <Blob>Action/Rocky2.wmv</Blob>  
 <Blob>Action/Rocky3.wmv</Blob>  
 </NextMarker> OpaqueMarker1</NextMarker>

С первым набором объектов blob возвращается и непрозрачный маркер, который может быть передан во второй вызов ListBlobs. Тогда этот вызов обеспечит возвращение следующих результатов:

Запрос:

GET http://sally.blob.windows.net/movies?comp=list &prefix=Action &maxresults=3 
  &marker=OpaqueMarker1

Ответ:

<Blob>Action/Rocky4.wmv</Blob>  
 <Blob>Action/Rocky5.wmv</Blob>  
 </NextMarker></NextMarker>

Как показано выше, возвращены оставшиеся объекты blob каталога; "NextMarker" пуст, это свидетельствует о том, что получены все результаты.

< Лекция 7 || Лекция 8: 12345 || Лекция 9 >
Нияз Сабиров
Нияз Сабиров

Здравствуйте. А уточните, пожалуйста, по какой причине стоимость изменилась? Была стоимость в 1 рубль, стала в 9900 рублей.

Елена Сапегова
Елена Сапегова

для получения диплома нужно ли кроме теоретической части еще и практическую делать? написание самого диплома требуется?

Владислав Ветошкин
Владислав Ветошкин
Россия, Ижевск, Ижевский государственный технический университет имени А.Т. Калашникова, 2011
Саламат Исахан
Саламат Исахан
Россия, Turkistan