Управление данными больших двоичных объектов Azure и их поиск с помощью тегов индекса больших двоичных объектов

По мере того как наборы данных увеличиваются, поиск определенного объекта в океане данных становится все более сложной задачей. Теги индекса больших двоичных объектов упрощают управление данными и их обнаружение с помощью атрибутов "ключ —значение". Вы можете классифицировать и находить объекты в одном контейнере или во всех контейнерах учетной записи хранения сразу. В случае изменения требований к данным объекты можно динамически классифицировать путем обновления тегов индекса. Объекты могут оставаться на месте в текущей организации контейнеров.

Теги индекса больших двоичных объектов позволяют:

  • динамически классифицировать большие двоичные объекты с помощью тегов индекса "ключ — значение";

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

  • настраивать условное поведение для API-интерфейсов BLOB-объектов на основе оценки тегов индекса;

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

Рассмотрим ситуацию, когда в вашей учетной записи хранения находятся миллионы больших двоичных объектов, доступ к которым осуществляется множеством разных приложений. Необходимо найти все связанные данные из одного проекта. Вы не знаете, что именно в них входит, так как данные могут быть распределены по нескольким контейнерам с разными соглашениями об именовании. Однако ваши приложения передают все данные с тегами в зависимости от конкретного проекта. Вместо поиска по миллионам больших двоичных объектов и сравнения имен и свойств можно использовать конструкцию типа Project = Contoso в качестве условия обнаружения. В результате индекс BLOB-объектов фильтрует все контейнеры во всей учетной записи хранения, быстро находит и возвращает набор лишь из 50 больших двоичных объектов по признаку Project = Contoso.

Примеры использования индекса больших двоичных объектов см. в разделе Использование тегов индекса BLOB-объектов для поиска данных и управления ими.

Теги индекса BLOB-объектов и управление данными

Префиксы имени контейнеров и BLOB-объектов — это одномерные классификации. Теги индекса больших двоичных объектов позволяют реализовать многомерную классификацию для типов данных BLOB-объектов (блоков, добавлений и страниц). Многомерные классификации изначально индексируются Хранилищем BLOB-объектов Azure, что позволяет быстро находить данные.

Предположим, что в вашей учетной записи хранения пять больших двоичных объектов:

  • container1/transaction.csv

  • container2/campaign.docx

  • photos/bannerphoto.png

  • archives/completed/2019review.pdf

  • logs/2020/01/01/logfile.txt

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

Задание тегов индекса больших двоичных объектов

Теги индекса больших двоичных объектов — это атрибуты типа "ключ — значение", которые могут применяться к новым или существующим объектам в учетной записи хранения. Теги индекса можно указать во время отправки с помощью команды Put Blob, Put Block List или Copy Blob, а также необязательного заголовка x-ms-tags. Если у вас уже есть большие двоичные объекты в учетной записи хранения, вызовите функцию Set Blob Tags, передав ей отформатированный XML-документ с тегами индекса в тексте запроса.

Важно!

Задать теги индекса большого двоичного объекта может владелец данных больших двоичных объектов в хранилище и любой пользователь с подписанным URL-адресом (SAS), имеющий разрешение на доступ к тегам BLOB-объекта (разрешение SAS t).

Кроме того, выполнять эту операцию могут пользователи RBAC с разрешением Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/write.

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

"processedDate" = '2020-01-01'

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

"Project" = 'Contoso' "Classified" = 'True' "Status" = 'Unprocessed' "Priority" = '01'

Чтобы изменить существующие атрибуты тега индекса, извлеките их, измените и замените с помощью операции Set Blob Tags. Чтобы удалить из большого двоичного объекта все теги индекса, вызовите операцию Set Blob Tags без указания атрибутов тегов. Поскольку теги индекса больших двоичных объектов являются вложенным ресурсом содержимого данных BLOB-объекта, операция Set Blob Tags не изменяет его базовое содержимое, а также время последнего изменения или тег eTag. Вы можете создавать или изменять теги индекса для всех текущих базовых BLOB-объектов. Теги индекса также сохраняются для предыдущих версий, но не передаются в механизм индексации больших двоичных объектов, поэтому нельзя запрашивать теги индекса для получения предыдущих версий. Теги моментальных снимков или обратимо удаленных БОЛЬШИХ двоичных объектов нельзя изменить.

Для тегов индекса больших двоичных объектов действуют указанные ниже ограничения.

  • У каждого большого двоичного объекта может быть до 10 тегов индекса.

  • Ключи тегов должны быть между одним и 128 символами.

  • Значения тегов должны находиться в диапазоне от нуля до 256 символов.

  • Ключи и значения тегов чувствительны к регистру.

  • Ключи и значения тегов поддерживают только строковые типы данных. Все числа, даты, время или специальные символы сохраняются в виде строк.

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

  • Ключи и значения тегов должны соответствовать указанным ниже правилам именования.

    • Алфавитно-цифровые символы:

      • от a до z (строчные буквы);

      • от A до Z (прописные буквы);

      • от 0 до 9 (цифры).

    • Допустимые специальные символы: пробел, плюс, минус, точка, двоеточие, знак равенства, символ подчеркивания, косая черта ( +-.:=_/).

Получение и перечисление тегов индекса больших двоичных объектов

Теги индекса больших двоичных объектов хранятся как вложенные ресурсы вместе с данными объектов и могут извлекаться независимо от содержимого их базовых данных. Теги индекса для одного большого двоичного объекта можно получить с помощью операции Get Blob Tags. Операция List Blobs с параметром include:tags также возвращает все большие двоичные объекты в контейнере вместе с их тегами индекса.

Важно!

Задать теги индекса большого двоичного объекта и получить их список может владелец данных больших двоичных объектов в хранилище и любой пользователь с подписанным URL-адресом (SAS), имеющий разрешение на доступ к тегам BLOB-объекта (разрешение SAS t).

Кроме того, выполнять эту операцию могут пользователи RBAC с разрешением Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/read.

Для больших двоичных объектов по крайней мере с одним тегом индекса операции List Blobs, Get Blob и Get Blob Properties возвращают значение x-ms-tag-count — количество тегов индекса данного объекта.

Поиск данных с помощью тегов индекса больших двоичных объектов

Механизм индексирования предоставляет атрибуты "ключ — значение" в виде многомерного индекса. После настройки тегов индекса они сразу появляются в большом двоичном объекте и могут быть немедленно получены из него.

До обновления индекса BLOB-объектов может потребоваться некоторое время. Это верно как для добавления тегов, так и для редактирования существующих. Время, необходимое для работы, зависит от рабочей нагрузки. Например, если операция "Задать теги BLOB-объектов " занимает 30 минут, чтобы выполнить с частотой 15000 до 2000 транзакций в секунду, то для индексирования всех этих БОЛЬШИХ двоичных объектов может потребоваться до 10 минут. При более низкой скорости задержка индексирования может находиться в секунде. Распределение трафика также влияет на задержки индексирования. Например, если клиентское приложение задает теги больших двоичных объектов в последовательном порядке в одном контейнере, задержка может быть выше, чем если теги применяются к большим двоичным объектам, которые не находятся вместе.

После обновления индекса можно использовать встроенные возможности запросов и обнаружения Хранилища BLOB-объектов.

Операция поиска больших двоичных объектов по тегам Find Blobs by Tags позволяет получить отфильтрованный набор больших двоичных объектов, теги индекса которых соответствуют заданному выражению запроса. Find Blobs by Tags поддерживает фильтрацию по всем контейнерам в учетной записи хранения, а также позволяет ограничить область фильтрации единственным контейнером. Поскольку все ключи и значения тега индекса являются строками, операторы отношения используют лексикографический порядок сортировки.

Важно!

Поиск данных с помощью тегов индекса BLOB-объектов может выполняться владельцем данных большого двоичного объекта служба хранилища и любым пользователем с подписанным URL-адресом с разрешением на поиск БОЛЬШИХ двоичных объектов по тегам (fразрешение SAS).

Кроме того, выполнять эту операцию могут пользователи RBAC с разрешением Microsoft.Storage/storageAccounts/blobServices/containers/blobs/filter/action.

При фильтрации индекса больших двоичных объектов применяются перечисленные ниже критерии.

  • Ключи тегов должны быть заключены в двойные кавычки (").

  • Значения тегов и имена контейнеров должны быть заключены в одинарные кавычки (').

  • Символ @ разрешен только при фильтрации по контейнеру с определенным именем (например, @container = 'ContainerName').

  • Фильтры применяются с лексикографическим порядком сортировки строк.

  • Операции диапазона с одной стороны на одном и том же ключе запрещены (например, "Rank" > '10' AND "Rank" >= '15').

  • При создании критерия фильтрации с помощью REST символы должны быть в кодировке URI.

  • Запросы с тегами выполняются максимально эффективно при проверке на равенство с использованием одного тега (например, StoreID = "100"). Также эффективно выполняются запросы диапазона с использованием одного тега и операторов >, >=, <, <=. Запросы, где используется операция AND и несколько тегов, менее эффективны. Например, операция Cost > "01" AND Cost <= "100" эффективна. Операция Cost > "01" AND StoreID = "2" не так эффективна.

В таблице ниже показаны все допустимые операторы для операции Find Blobs by Tags.

Operator Description Пример
= Equal "Status" = 'In Progress'
> Больше "Date" > '2018-06-18'
>= Больше или равно "Priority" >= '5'
< Меньше "Age" < '32'
<= Меньше или равно "Priority" <= '5'
И Логическое И "Rank" >= '010' AND "Rank" < '100'
@container Выполнение в определенном контейнере @container = 'videofiles' AND "status" = 'done'

Примечание.

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

  • Цифры сортируются перед буквами. Числа сортируются по первой цифре.
  • Буквы в верхнем регистре сортируются перед буквами в нижнем.
  • Для символов стандарт отсутствует. Некоторые символы сортируются перед числовыми значениями. Другие символы сортируются перед буквами или после них.

Условные операции с BLOB-объектами с тегами индекса

В версиях REST 2019-10-10 и выше большинство API-интерфейсов службы BLOB-объектов теперь поддерживают условный заголовок x-ms-if-tags, т. е. операция выполняется только при соблюдении определенного условия для индекса большого двоичного объекта. Если условие не выполнено, возвращается ошибка error 412: The condition specified using HTTP conditional header(s) is not met.

Заголовок x-ms-if-tags можно объединять с другими существующими условными заголовками HTTP (If-Match, If-None-Match и т. п.). Если запрос содержит несколько условных заголовков, для выполнения операции все они должны возвращать истину. Все условные заголовки фактически объединяются с помощью операции логического И.

В таблице ниже показаны допустимые операторы для условных операций.

Operator Description Пример
= Equal "Status" = 'In Progress'
<> Not equal "Status" <> 'Done'
> Больше "Date" > '2018-06-18'
>= Больше или равно "Priority" >= '5'
< Меньше "Age" < '32'
<= Меньше или равно "Priority" <= '5'
И Логическое И "Rank" >= '010' AND "Rank" < '100'
ИЛИ Логическое ИЛИ "Status" = 'Done' OR "Priority" >= '05'

Примечание.

Существует два дополнительных оператора — "не равно" и логическое ИЛИ, которые разрешены в условном заголовке x-ms-if-tags для операций с BLOB-объектами, но не существуют в операции Find Blobs by Tags.

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

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

Управление жизненным циклом

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

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

Следующий пример правила управления жизненным циклом применяется к блочным BLOB-объектам в контейнере videofiles. Правило переносит BLOB-объекты в архивном хранилище только в том случае, если данные соответствуют условию "Status" == 'Processed' AND "Source" == 'RAW' на тег индекса.

Blob index match rule example for Lifecycle management in Azure portal

Разрешения и авторизация

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

  • Использование управления доступом на основе ролей Azure (Azure RBAC) для предоставления разрешений субъекту безопасности Microsoft Entra. Используйте идентификатор Microsoft Entra для обеспечения повышенной безопасности и простоты использования. Дополнительные сведения об использовании идентификатора Microsoft Entra с операциями больших двоичных объектов см. в статье "Авторизация доступа к данным в служба хранилища Azure".

  • С помощью подписанного URL-адреса (SAS) для делегирования доступа к индексу BLOB-объектов. Дополнительные сведения о подписанных URL-адресах см. в статье об использование подписанных URL-адресов SAS в службе хранилища Azure.

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

Теги индекса больших двоичных объектов являются вложенным ресурсом для данных больших двоичных объектов. У пользователя с разрешениями или маркером SAS для чтения или записи больших двоичных объектов может не быть доступа к тегам индекса.

Управление доступом на основе ролей

Вызывающие объекты с помощью удостоверения Microsoft Entra могут быть предоставлены следующие разрешения для работы с тегами индекса BLOB-объектов.

Операции с тегами индекса больших двоичных объектов Действие Azure RBAC
Установка тегов BLOB-объектов Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/write
Получение тегов BLOB-объектов Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/read
Поиск BLOB-объектов по тегам Microsoft.Storage/storageAccounts/blobServices/containers/blobs/filter/action

Для операций с тегами индекса требуются дополнительные разрешения, действующие отдельно от базовых данных BLOB-объектов. Роли владельца данных BLOB-объектов хранилища предоставляются разрешения для всех трех операций с тегами индекса.

Разрешения SAS

Вызывающим объектам, использующим подписанный URL-адрес (SAS), могут предоставляться ограниченные разрешения на операции с тегами индекса больших двоичных объектов.

SAS службы для BLOB-объекта

С помощью SAS службы для BLOB-объекта можно предоставить указанные ниже разрешения на доступ к тегам индекса. Для чтения и записи тегов индекса недостаточно только разрешений на чтение (r) и запись (w) больших двоичных объектов.

Разрешение Символ URI Разрешенные операции
Теги индекса t Получение и установка тегов индекса для большого двоичного объекта

SAS службы для контейнера

Чтобы разрешить фильтрацию по тегам больших двоичных объектов, в SAS службы для контейнера можно предоставить указанные ниже разрешения. Для фильтрации больших двоичных объектов по тегам индекса недостаточно разрешения на получение списка BLOB-объектов (i).

Разрешение Символ URI Разрешенные операции
Теги индекса f Поиск больших двоичных объектов по тегам индекса

SAS для учетной записи

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

Разрешение Символ URI Разрешенные операции
Теги индекса t Получение и установка тегов индекса для большого двоичного объекта
Теги индекса f Поиск больших двоичных объектов по тегам индекса

Для чтения и записи тегов индекса недостаточно только разрешения на чтение (r) и запись (w) BLOB-объектов, а для фильтрации BLOB-объектов по тегам индекса недостаточно разрешения на получение списка (i).

Выбор между метаданными и тегами индекса больших двоичных объектов

Теги индекса больших двоичных объектов и метаданные позволяют хранить произвольные заданные пользователем свойства в виде пар "ключ — значение" вместе с ресурсом BLOB-объекта. И теги, и метаданные можно получать и задавать напрямую без получения и изменения содержимого большого двоичного объекта. Метаданные и теги индекса можно использовать параллельно.

Автоматически индексируются и становятся доступными для поиска с помощью собственной службы Хранилища BLOB-объектов только теги индекса. Встроенная индексация и поиск метаданных не реализованы. Для этого необходимо использовать отдельную службу, например Поиск Azure. У тегов индекса больших двоичных объектов есть дополнительные разрешения на чтение, фильтрацию и запись отдельно от базовых данных BLOB-объектов. Метаданные используют те же разрешения, что и BLOB-объект, и возвращаются в виде заголовков HTTP с помощью операций Get Blob и Get Blob Properties. Теги индекса больших двоичных объектов шифруются при хранении с помощью ключа, управляемого Майкрософт. Метаданные шифруются при хранении с использованием того же ключа шифрования, что и данные большого двоичного объекта.

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

Метаданные Теги индекса BLOB-объектов
Ограничения Без числового ограничения, 8 КБ всего, без учета регистра. До 10 тегов на BLOB-объект, 768 байт на тег, с учетом регистра.
Обновления Не допускается на архивном уровне, Set Blob Metadata заменяет все существующие метаданные, Set Blob Metadata изменяет время последнего изменения большого двоичного объекта. Допускается для всех уровней доступа, Set Blob Tags заменяет все существующие теги, Set Blob Tags не изменяет время последнего изменения большого двоичного объекта.
Память Хранятся с данными большого двоичного объекта. Являются вложенным ресурсом данных большого двоичного объекта.
Индексирование и запросы Необходимо использовать отдельную службу, например Поиск Azure. Функции индексирования и запросов встроены в Хранилище BLOB-объектов.
Шифрование Шифруются при хранении с тем же ключом шифрования, что и для данных BLOB-объектов. Шифруются при хранении с помощью ключа шифрования, управляемого корпорацией Майкрософт.
Цены Размер метаданных включается в стоимость хранилища для большого двоичного объекта. Фиксированная стоимость из расчета за тег индекса.
Ответ в виде заголовка Для операций Get Blob и Get Blob Properties метаданные возвращаются в виде заголовков. Для операций Get Blob и Get Blob Properties возвращается количество тегов, теги возвращаются только для операций Get Blob Tags и List Blobs.
Разрешения Разрешения на чтение и запись данных большого двоичного объекта распространяются и на метаданные. Для чтения, фильтрации и записи тегов индекса требуются дополнительные разрешения.
Именование Имена метаданных должны соответствовать правилам именования идентификаторов C#. Теги индекса больших двоичных объектов поддерживают более широкий диапазон буквенно-цифровых символов.

Цены

Взимается плата за месячное среднее число тегов индекса в учетной записи хранения. Стоимость никак не связана с использованием механизма индексирования. Запросы на установка тегов BLOB-объектов, получение тегов BLOB-объектов и поиск тегов BLOB-объектов взимается по текущим соответствующим тарифам транзакций. Обратите внимание, что количество учетных транзакций, используемых при выполнении операции поиска по тегам BLOB-объектов, равно количеству предложений в запросе. Например, запрос (StoreID = 100) является одной учетной транзакцией. Запрос (StoreID = 100 AND SKU = 10010) соответствует двум учетным транзакциям. Дополнительные сведения см. на странице цен на блочные BLOB-объекты.

Поддерживаемые компоненты

На поддержку данной функции может повлиять включение протокола Data Lake Storage 2-го поколения, протокола сетевой файловой системы (NFS) 3.0 или протокола SFTP. Если вы включили любую из этих возможностей, см. Сведения о поддержке функций хранилища BLOB-объектов в учетных записях хранения Azure, чтобы оценить поддержку данной функции.

Ограничения и известные проблемы

В этом разделе описаны известные проблемы и условия.

  • Поддерживаются только учетные записи общего назначения версии 2 и учетные записи блочных BLOB-объектов класса Premium. Blob-объект страницы "Премиум", устаревший большой двоичный объект и учетные записи с включенным иерархическим пространством имен не поддерживаются. Учетные записи общего назначения версии 1 не будут поддерживаться.

  • При передаче страничных BLOB-объектов с тегами индекса теги не сохраняются. Теги следует задавать после передачи страничного BLOB-объекта.

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

  • API для определения индексации тегов индекса отсутствует.

  • В управлении жизненным циклом поддерживаются только проверки равенства по индексу BLOB-объектов.

  • Copy Blob не копирует теги индекса BLOB-объектов из исходного BLOB-объекта в новый целевой объект. Вы можете указать теги, которые необходимо применить к целевому объекту, во время операции копирования.

Вопросы и ответы

См. часто задаваемые вопросы о тегах индекса BLOB-объектов.

Следующие шаги

Пример использования индекса больших двоичных объектов см. в разделе Использование индекса BLOB-объектов для поиска данных и управления ими.

Узнайте об управлении жизненным циклом и настройке правил поиска по индексу больших двоичных объектов.