Как загрузить zip-файл в лазурный BLOB-объект, а затем разархивировать его там

У меня много zip-файлов, в которых будет несколько папок и более 50 файлов. Как я могу загрузить эти zip-файлы в azure blob, а затем разархивировать их там.

Распаковка файла на сервере и загрузка файлов в него один за другим в лазурный BLOB-объект будет громоздким процессом.

Есть ли в лазури простой способ добиться этого или есть обходной путь?

Я реализую это в PHP.


person Mathankumar    schedule 03.04.2017    source источник
comment
Да в основном как Amazon S3. Вместо того, чтобы загружать сотни, а иногда и тысячи файлов по сети один за другим, S3 позволяет вам загрузить zip-архив, и он извлечет его для вас в выбранное место. 1 файл, 1 передача. Можно ли вместо этого использовать корзины Amazon S3? - я не работаю на Амазон   -  person Will Hancock    schedule 29.11.2017


Ответы (3)


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

Одна из возможностей (как вы упомянули) заключается в том, что вы загружаете zip-файлы на свой сервер, распаковываете их там, а затем загружаете отдельные файлы.

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

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

person Gaurav Mantri    schedule 03.04.2017

Как вы вероятно. уже найдены в Интернете, невозможно запускать рабочие нагрузки ВНУТРИ серверов хранения... но: вы можете написать функция Azure для FileWatch вашей учетной записи хранения и распаковывает файлы для вас, а затем загружает их

person EvertonMc    schedule 03.04.2017
comment
Связанная презентация: youtube.com/watch?v=GRztpy337kU - person JohnLBevan; 19.03.2020
comment
Функции могут вызвать проблемы при обработке больших объемов данных, как в случае с большими zip-файлами. Они представляют довольно жесткие ограничения памяти/времени выполнения/хранилища. - person Rick Moritz; 23.10.2020

Как упоминает @Gaurav, распаковка наивно не поддерживается. Было элемент отзыва, чтобы включить его в качестве функции, но он был отклонен. Я могу придумать две альтернативы, которые могут представлять интерес.

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

2) Переместите большие двоичные объекты из хранилища BLOB-объектов Azure в Azure Data Lake Store с помощью adlcopy.exe. Оказавшись в Data Lake Storage, вы можете создать свой собственный настраиваемый экстрактор и запросите файлы zip/gzip. После еще одного просмотра документации кажется, что USQL может сделать это изначально. Найдите раздел Извлечение из сжатых данных в ИЗВЛЕКАТЬ выражение.

3) Используйте PolyBase с хранилищем данных SQL, которое изначально может читать файлы zip/gzip. Это самый простой, но, пожалуй, и самый дорогой вариант. См. СОЗДАНИЕ ВНЕШНЕЙ ТАБЛИЦЫ и CREATE ВНЕШНИЙ ФОРМАТ ФАЙЛА.

4) И, как только что упомянул @EvertonMc, вы можете сделать это с помощью функции Azure на триггере, что также является хорошим вариантом.

Удачи и дайте нам знать, как вы поживаете.

person Murray Foxcroft    schedule 03.04.2017