Является ли пакетное удаление лучшим способом удаления каталога в хранилище Azure?

#c# #azure #azure-storage #azure-blob-storage

#c# #azure #azure-storage #azure-blob-storage

Вопрос:

Мне интересно, какой наиболее эффективный способ удалить каталог (или просто пакет больших двоичных объектов, если на то пошло — я осведомлен о том факте, что хранилище Azure не имеет концепции каталогов или папок) с использованием c #. Прямо сейчас я использую параллельное удаление (используя Parallel.Для каждого) из всех больших двоичных объектов в папке — требуется около минуты для 420 больших двоичных объектов, общий размер которых составляет 11 МБ.

Код выглядит примерно так:

 Parallel.ForEach(urisToDelete.Distinct(), uri => { 
    var blobReference = await this.cloudBlobClient.GetBlobReferenceFromServerAsync(uri);
    await blobReference.DeleteAsync();
});
  

Я пытаюсь оптимизировать этот процесс и наткнулся на эту документацию Microsoft о пакетном удалении. Немного сложно изменить его в моем проекте для тестирования производительности. Кто-нибудь знает, повышается ли производительность при использовании этого метода удаления? Кто-нибудь знает лучший метод?

Большое спасибо!

Ответ №1:

Да, batch deletion через пакетный клиент обеспечивает более высокую производительность, чем при использовании Parallel.ForEach(xxx) .

Поскольку batch delete будет выполнять несколько операций удаления хранилища больших двоичных объектов Azure в одном запросе, что действительно имеет более высокую производительность. Но при использовании Parallel.ForEach он будет отправлять много запросов и приведет к снижению производительности.

Но вы должны знать ограничение при его использовании, например, один пакет поддерживает только до 256 подзапросов и т.д. Вы можете прочитать эту статью для получения более подробной информации об этом.

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