Экспорт (0) Печать
Развернуть все

Вставка страницы

Обновлено: Январь 2014 г.

Операция Put Page записывает диапазон страниц в страничный большой двоичный объект.

Запрос Put Page можно составить следующим образом. Рекомендуется использовать протокол HTTPS. Замените myaccount именем нужной учетной записи хранения.

 

  URI запроса метода PUT Версия HTTP

https://myaccount.blob.core.windows.net/mycontainer/myblob?comp=page

HTTP/1.1

При построении запроса к эмулированной службе хранилища укажите имя узла эмулятора и порт службы BLOB-объектов как 127.0.0.1:10000, затем укажите имя эмулированной учетной записи хранилища.

 

  URI запроса метода PUT Версия HTTP

http://127.0.0.1:10000/devstoreaccount1/mycontainer/myblob?comp=page

HTTP/1.1

Дополнительные сведения см. в Использование эмулятора хранилища Azure для разработки и тестирования.

В URI запроса могут быть заданы следующие дополнительные параметры.

 

Параметр Описание

timeout

Необязательно. Параметр timeout указывается в секундах. Дополнительные сведения см. в Задание времени ожидания для операций службы BLOB-объектов.

В следующей таблице перечислены обязательные и необязательные заголовки запросов.

 

Заголовок запроса Описание

Authorization

Обязательно. Указывает схему проверки подлинности, имя учетной записи и подпись. Дополнительные сведения см. в Проверка подлинности для служб хранения Azure.

Date или x-ms-date

Обязательно. Задает время в формате UTC для запроса. Дополнительные сведения см. в Проверка подлинности для служб хранения Azure.

x-ms-version

Требуется для запросов с проверкой подлинности. Задает версию операции, используемой для этого запроса. Дополнительные сведения см. в Управление версиями для служб хранилища Azure.

Range

Требуется Range или x-ms-range.

Указывает диапазон байтов, записываемых как одна страница. Следует указать начало и конец диапазона. Этот заголовок определен спецификацией протокола HTTP/1.1.

Для операции обновления диапазон страниц не может превышать 4 МБ. Для операции очистки страницы диапазон страниц не может превышать полный размер большого двоичного объекта.

С учетом того, что страницы не должны превышать ограничение в 512 байт, начальная позиция должна быть остатком от деления 512, а конечная — остатком от деления 512 – 1. Примеры допустимых диапазонов байтов: 0–511, 512–1023 и т. д.

Служба BLOB-объектов принимает только один байтовый диапазон для заголовка Range, при этом байтовый диапазон необходимо указывать в следующем формате: bytes=startByte-endByte.

Если заданы оба параметра, Range и x-ms-range, то служба использует значение x-ms-range. Дополнительные сведения см. в разделе Указание заголовка диапазона для операций службы BLOB-объектов.

x-ms-range

Требуется Range или x-ms-range.

Указывает диапазон байтов, записываемых как одна страница. Следует указать начало и конец диапазона. Этот заголовок определен спецификацией протокола HTTP/1.1.

Для операции обновления диапазон страниц не может превышать 4 МБ. Для операции очистки страницы диапазон страниц не может превышать полный размер большого двоичного объекта.

С учетом того, что страницы не должны превышать ограничение в 512 байт, начальная позиция должна быть остатком от деления 512, а конечная — остатком от деления 512 – 1. Примеры допустимых диапазонов байтов: 0–511, 512–1023 и т. д.

Служба BLOB-объектов принимает только один байтовый диапазон для заголовка x-ms-range, при этом байтовый диапазон необходимо указывать в следующем формате: bytes=startByte-endByte.

Если заданы оба параметра, Range и x-ms-range, то служба использует значение x-ms-range. Дополнительные сведения см. в разделе Указание заголовка диапазона для операций службы BLOB-объектов.

Content-Length

Обязательно. Указывает число байтов, передаваемых в тексте запроса. Если заголовок x-ms-page-write имеет значение clear, то этот заголовок следует установить в значение нуль.

Content-MD5

Необязательно. Хэш MD5 содержимого страницы. Этот хэш используется для проверки целостности страницы в течение транспорта. Если указан этот заголовок, то служба хранилища сравнивает хэш полученного содержимого со значением отправленного заголовка. Если хэш не совпадает, операция завершится с ошибкой и кодом ошибки 400 (неправильный запрос).

Заголовок Content-MD5 недопустим, если заголовок x-ms-page-write имеет значение clear. Если заголовок включается в запрос, то служба BLOB-объектов возвращает код состояния 400 (неверный запрос).

x-ms-page-write: {update | clear}

Обязательно. Можно указать одно из следующих значений.

  • Update: записывает байты, указанные текстом запроса, в указанный диапазон. Для выполнения обновления заголовки Range и Content-Length должны совпадать.

  • Clear: очищает указанный диапазон и освобождает пространство, используемое в хранилище для этого диапазона. Чтобы очистить диапазон, установите заголовок Content-Length в значение 0, а заголовок Range в значение, указывающее очищаемый диапазон (не более максимального размера большого двоичного объекта).

x-ms-lease-id:<ID>

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

x-ms-if-sequence-number-le: <num>

Необязательно. Если порядковый номер большого двоичного объекта меньше указанного значения или равен ему, то запрос будет выполнен; в противном случае он завершается с ошибкой SequenceNumberConditionNotMet (код состояния HTTP 412 — не выполнено предварительное условие).

x-ms-if-sequence-number-lt: <num>

Необязательно. Если порядковый номер большого двоичного объекта меньше указанного значения, то запрос будет выполнен; в противном случае он завершается с ошибкой SequenceNumberConditionNotMet (код состояния HTTP 412 — не выполнено предварительное условие).

x-ms-if-sequence-number-eq: <num>

Необязательно. Если порядковый номер большого двоичного объекта равен указанному значению, то запрос будет выполнен; в противном случае он завершается с ошибкой SequenceNumberConditionNotMet (код состояния HTTP 412 — не выполнено предварительное условие).

If-Modified-Since

Необязательно. Значение DateTime. Укажите этот условный заголовок для записи страницы только в том случае, если большой двоичный заголовок был изменен с указанных даты и времени. Если большой двоичный объект не был изменен, служба BLOB-объектов возвращает код состояния 412 (предварительное условие не выполнено).

If-Unmodified-Since

Необязательно. Значение DateTime. Укажите этот условный заголовок для записи страницы, только если большой двоичный заголовок не был изменен с указанных даты и времени. Если большой двоичный объект был изменен, то служба BLOB-объектов возвращает код состояния 412 (предварительное условие не выполнено).

If-Match

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

If-None-Match

Необязательно. Значение ETag.

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

x-ms-client-request-id

Необязательно. Предоставляет сформированное клиентом непрозрачное значение с ограничением в 1 КБ, которое записывается в журналы аналитики, когда включено ведение журналов аналитики хранилища. Этот заголовок настоятельно рекомендуется использовать для соотнесения действий, выполняемых на стороне клиента, с запросами, получаемыми сервером. Дополнительные сведения см. в разделах Сведения о ведении журнала службы аналитики хранилища и Ведение журналов в Windows Azure: использование журналов для отслеживания запросов к хранилищу.

Эта операция также поддерживает использование условных заголовков для выполнения операции при выполнении определенного условия. Дополнительные сведения см. в Указание условных заголовков для операций со службой BLOB-объектов.

Текст запроса содержит страницу.


Request Syntax:
PUT https://myaccount.blob.core.windows.net/mycontainer/myblob?comp=page HTTP/1.1

Request Headers:
x-ms-page-write: update
x-ms-date: Fri, 16 Sep 2011 22:15:50 GMT
x-ms-version: 2011-08-18
x-ms-range: bytes=0-65535
Authorization: SharedKey myaccount:4KdWDiTdA9HmIF9+WF/8WfYOpUrFhieGIT7f0av+GEI=
Content-Length: 65536


Request Syntax:
PUT https://myaccount.blob.core.windows.net/mycontainer/myblob?comp=page HTTP/1.1

Request Headers:
Range: bytes=1024-2048
x-ms-page-write: clear
x-ms-date: Sun, 25 Sep 2011 23:37:35 GMT
x-ms-version: 2011-08-18
Authorization: SharedKey myaccount:4KdWDiTdA9HmIF9+WF/8WfYOpUrFhieGIT7f0av+GEI=

Ответ включает код состояния HTTP и набор заголовков ответа.

Успешная операция возвращает код состояния 201 (создано).

Сведения о кодах состояния см. в разделе Коды состояний и ошибок.

Ответ для этой операции включает следующие заголовки. Ответ может также включать дополнительные стандартные заголовки HTTP. Все стандартные заголовки соответствуют Спецификации протокола HTTP/1.1.

 

Синтаксис Описание

ETag

ETag BLOB-объекта. Если версия запроса 2011-08-18 или более поздняя, то значение ETag будет указано в кавычках. ETag можно использовать для выполнения условной операции Put Page путем указания значения в заголовке запроса If-Match или If-None-Match.

Last-Modified

Дата и время последнего изменения большого двоичного объекта. Дата в формате согласно RFC 1123. Дополнительные сведения см. в разделе Представление значений даты и времени в заголовках.

Любая операция записи в большой двоичный объект, включая обновления метаданных или свойств, изменяет время последнего изменения большого двоичного объекта.

Content-MD5

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

x-ms-blob-sequence-number

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

x-ms-request-id

Этот заголовок однозначно определяет выполненный запрос, его также можно использовать для устранения связанных с запросом неполадок. Дополнительные сведения см. в Устранение неполадок при API-операциях.

x-ms-version

Указывает версию службы BLOB-объектов, используемую для выполнения запроса. Этот заголовок возвращается для запросов к версии 2009-09-19 и более поздним версиям.

Date

Значение даты и времени в формате UTC, сформированное службой и указывающее время, когда был инициирован ответ.

Response Status:
HTTP/1.1 201 Created

Response Headers:
Transfer-Encoding: chunked
Content-MD5: sQqNsWTgdUEFt6mb5y4/5Q==
Date: Sun, 25 Sep 2011 22:33:35 GMT
ETag: "0x8CB171BA9E94B0B"
Last-Modified: Sun, 25 Sep 2011 12:13:31 GMT
x-ms-version: 2011-08-18
x-ms-blob-sequence-number: 0
Content-Length: 0
Server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0

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

Операция Put Page записывает диапазон страниц в страничный большой двоичный объект. Эта операция может быть вызвана только для существующего страничного большого двоичного объекта. Ее нельзя вызывать для создания нового страничного или блочного большого двоичного объекта. Вызов метода Put Page с именем большого двоичного объекта, который в настоящий момент не существует, возвращает ошибку «Объект не найден» (код состояния HTTP 404 — не найдено).

Чтобы создать новый страничный большой двоичный объект, вызовите метод Вставка большого двоичного объекта и укажите тип объекта создаваемого в качестве страничного большого двоичного объекта. Размер страничного большого двоичного объекта не может превышать 1 ТБ.

Если большой двоичный объект имеет активную аренду, то клиент должен указать в запросе идентификатор аренды для записи страницы.

Операции обновления страницы

Вызов метода Put Page с параметром Update выполняет локальную запись в указанный страничный большой двоичный объект. Содержимое на указанной странице будет перезаписано в результате обновления.

ImportantВажно!
Если время ожидания сервера истекло или соединение закрыто во время операции Put Page, то страница может не быть обновлена. Поэтому необходимо продолжить попытки обновления до получения ответа с указанием успешной операции.

Каждый диапазон страниц, отправленных с помощью операции Put Page для обновления, не может превышать 4 МБ. Начальный и конечный диапазон страницы не должны превышать ограничение в 512 байт. Если попробовать загрузить диапазон страниц более 4 MБ, то служба возвращает код состояния 413 (слишком большая сущность запроса).

Операции очистки страницы

Вызов метода Put Page с параметром Clear освобождает объем памяти, используемый указанной страницей. Очищенные страницы больше не отслеживаются как часть страничного большого двоичного объекта.

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

Решение проблем параллелизма

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

  • Можно проверить значение заголовка ответа Last-Modified для каждого успешного вызова Put Page. Порядок ответов, возвращенных службой BLOB-объектов, может не соответствовать порядку, в котором они выполнялись службой. Однако значение Last-Modified всегда указывает порядок, в котором служба обрабатывала запросы.

  • Обновления можно выполнять условно, исходя из значения ETag большого двоичного объекта или времени последнего изменения, опираясь на оптимистичный параллелизм. Этот подход хорошо работает для относительно небольшого числа параллельных операций записи. Для этой цели нужно использовать условные заголовки If-Match, If-None-Match, If-Modified-Since и If-Unmodified-Since.

  • Можно вызвать метод Аренда больших двоичных объектов, чтобы заблокировать большой двоичный объект от других записей на одну минуту или дольше, если аренда продлевается.

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

Использование порядкового номера страничного большого двоичного объекта для повторов запроса

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

  1. Истекает время ожидания для запроса Put Page на запись значения X в страницу 0, или запрос не возвращает ответ.

  2. Повторный запрос на запись значения X в страницу 0 завершается успешно.

  3. Запрос на запись значения Y в страницу 0 завершается успешно.

  4. Первоначальный запрос завершается успешно и записывает значение X в страницу 0.

  5. Операция чтения страницы 0 возвращает значение X, тогда как клиент ожидал получить значение Y.

Такого рода конфликт может возникнуть, если первоначальный запрос не вернул код состояния в диапазоне 100–499 или 503 (сервер занят). Если возвращается один из этих кодов, то можно быть уверенным, завершился ли запрос успешно. Однако если служба возвращает код состояния за пределами этого диапазона, то нет возможности узнать состояние первоначального запроса.

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

  1. Клиент создает страничный большой двоичный объекта с помощью метода Вставка большого двоичного объекта и задает порядковый номер равным 0.

  2. Истекает время ожидания для запроса Put Page на запись значения X в страницу 0 с заголовком if-sequence-number-lt со значением 1, либо метод не возвращает ответ.

  3. Клиент вызывает метод установки свойств большого двоичного объекта, чтобы обновить порядковый номер до 1.

  4. Повторный запрос на запись значения X в страницу 0 с заголовком if-sequence-number-lt со значением 2 завершается успешно.

  5. Запрос на запись значения Y в страницу 0 с заголовком if-sequence-number-lt со значением 2 завершается успешно.

  6. Наконец, первоначальный запрос обрабатывается, однако он завершается ошибкой, так как в условии указано, что порядковый номер должен быть меньше 1 (т. е. заголовок if-sequence-num-lt имеет значение 1). Возникает ошибка SequenceNumberConditionNotMet (код состояния HTTP 412 — не выполнено предварительное условие).

  7. Чтение страницы 0 возвращает ожидаемое значение Y.

Показ:
© 2015 Microsoft